Skip to content

Commit 2aeed63

Browse files
[done-backend] google Oauth add
1 parent 8fa45eb commit 2aeed63

File tree

8 files changed

+407
-100
lines changed

8 files changed

+407
-100
lines changed

backend/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,10 @@
4343
"cors": "^2.8.5",
4444
"dotenv": "^16.1.4",
4545
"express": "^4.18.2",
46+
"google-auth-library": "^8.9.0",
4647
"http-status": "^1.6.2",
4748
"jsonwebtoken": "^9.0.0",
4849
"mongoose": "^7.3.0",
4950
"zod": "^3.21.4"
5051
}
51-
}
52+
}
Original file line numberDiff line numberDiff line change
@@ -1,83 +1,109 @@
1-
import { RequestHandler } from 'express';
2-
import sendResponse from '../../../shared/sendResponse';
3-
import catchAsync from '../../../shared/catchAsync';
4-
import httpStatus from 'http-status';
5-
import { AuthService } from './auth.service';
1+
import { RequestHandler } from 'express'
2+
import sendResponse from '../../../shared/sendResponse'
3+
import catchAsync from '../../../shared/catchAsync'
4+
import httpStatus from 'http-status'
5+
import { AuthService } from './auth.service'
66
import {
77
IRefreshTokenResponse,
88
IUserLoginResponse,
99
IUser#Response,
10-
} from './auth.interface';
11-
import config from '../../../config';
10+
} from './auth.interface'
11+
import config from '../../../config'
1212

1313
const createUser: RequestHandler = catchAsync(async (req, res) => {
14-
const { ...userData } = req.body;
14+
const { ...userData } = req.body
1515

1616
const { result, refreshToken, accessToken } = await AuthService.createUser(
1717
userData
18-
);
18+
)
1919

2020
// set refresh token in the browser cookie
2121
const cookieOptions = {
2222
secure: config.node_env === 'production',
2323
httpOnly: true,
24-
};
24+
}
2525

26-
res.cookie('refreshToken', refreshToken, cookieOptions);
26+
res.cookie('refreshToken', refreshToken, cookieOptions)
2727

2828
sendResponse<IUser#Response>(res, {
2929
statusCode: httpStatus.OK,
3030
success: true,
3131
message: 'user created successfully',
3232
data: { result, accessToken },
33-
});
34-
});
33+
})
34+
})
3535

3636
const login: RequestHandler = catchAsync(async (req, res) => {
37-
const { ...loginData } = req.body;
37+
const { ...loginData } = req.body
3838

39-
const result = await AuthService.login(loginData);
39+
const result = await AuthService.login(loginData)
4040

41-
const { refreshToken, ...accessToken } = result;
41+
const { refreshToken, ...accessToken } = result
4242

4343
// set refresh token in the browser cookie
4444
const cookieOptions = {
4545
secure: config.node_env === 'production',
4646
httpOnly: true,
47-
};
47+
}
4848

49-
res.cookie('refreshToken', refreshToken, cookieOptions);
49+
res.cookie('refreshToken', refreshToken, cookieOptions)
5050

5151
sendResponse<IUserLoginResponse>(res, {
5252
statusCode: httpStatus.OK,
5353
success: true,
5454
message: 'user logged in successfully',
5555
data: accessToken,
56-
});
57-
});
56+
})
57+
})
5858

5959
const refreshToken: RequestHandler = catchAsync(async (req, res) => {
60-
const { refreshToken } = req.cookies;
60+
const { refreshToken } = req.cookies
6161

62-
const result = await AuthService.refreshToken(refreshToken);
62+
const result = await AuthService.refreshToken(refreshToken)
6363

6464
// set refresh token in the browser cookie
6565
const cookieOptions = {
6666
secure: config.node_env === 'production',
6767
httpOnly: true,
68-
};
69-
res.cookie('refreshToken', refreshToken, cookieOptions);
68+
}
69+
res.cookie('refreshToken', refreshToken, cookieOptions)
7070

7171
sendResponse<IRefreshTokenResponse>(res, {
7272
statusCode: httpStatus.OK,
7373
success: true,
7474
message: 'New access token generated successfully !',
7575
data: result,
76-
});
77-
});
76+
})
77+
})
78+
79+
const googleAuth: RequestHandler = catchAsync(async (req, res) => {
80+
const { tokenId } = req.body
81+
82+
const result = await AuthService.googleAuth(tokenId)
83+
// console.log('result', result)
84+
let refreshToken, accessToken
85+
if (result) {
86+
;({ refreshToken, ...accessToken } = result)
87+
}
88+
// set refresh token in the browser cookie
89+
const cookieOptions = {
90+
secure: config.node_env === 'production',
91+
httpOnly: true,
92+
}
93+
94+
res.cookie('refreshToken', refreshToken, cookieOptions)
95+
96+
sendResponse<IUserLoginResponse>(res, {
97+
statusCode: httpStatus.OK,
98+
success: true,
99+
message: 'user logged in successfully',
100+
data: accessToken,
101+
})
102+
})
78103

79104
export const AuthController = {
80105
createUser,
81106
login,
82107
refreshToken,
83-
};
108+
googleAuth,
109+
}
+14-14
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
1-
import { IUser } from '../user/user.interface';
1+
import { IUser } from '../user/user.interface'
22

33
export type IUserLogin = {
4-
email: string;
5-
password: string;
6-
};
4+
email: string
5+
password: string
6+
}
77

88
export type IUser#Response = {
9-
result: IUser;
10-
accessToken?: string;
11-
refreshToken?: string;
12-
};
9+
result: IUser
10+
accessToken?: string
11+
refreshToken?: string
12+
}
1313

1414
export type IUserLoginResponse = {
15-
userData: IUser | null;
16-
accessToken: string;
17-
refreshToken?: string;
18-
};
15+
userData: IUser | null
16+
accessToken: string | null
17+
refreshToken?: string | null
18+
}
1919

2020
export type IRefreshTokenResponse = {
21-
accessToken: string;
22-
};
21+
accessToken: string
22+
}
+11-9
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,27 @@
1-
import express from 'express';
2-
import validateRequest from '../../middlewares/validateRequest';
3-
import { authValidation } from './auth.validation';
4-
import { AuthController } from './auth.controller';
5-
const router = express.Router();
1+
import express from 'express'
2+
import validateRequest from '../../middlewares/validateRequest'
3+
import { authValidation } from './auth.validation'
4+
import { AuthController } from './auth.controller'
5+
const router = express.Router()
66

77
router.post(
88
'/#',
99
validateRequest(authValidation.createUserZodSchema),
1010
AuthController.createUser
11-
);
11+
)
1212

1313
router.post(
1414
'/#',
1515
validateRequest(authValidation.loginUserZodSchema),
1616
AuthController.login
17-
);
17+
)
1818

1919
router.post(
2020
'/refresh-token',
2121
validateRequest(authValidation.refreshTokenZodSchema),
2222
AuthController.refreshToken
23-
);
23+
)
2424

25-
export const AuthRouter = router;
25+
router.post('/google_auth', AuthController.googleAuth)
26+
27+
export const AuthRouter = router

0 commit comments

Comments
 (0)