Skip to content

Commit 815993f

Browse files
committed
google_auth_0.2
1 parent 0d7cc96 commit 815993f

File tree

6 files changed

+52
-74
lines changed

6 files changed

+52
-74
lines changed

.env.example

+8-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,8 @@
1-
DB_HOST =
1+
DB_HOST =
2+
SECRET_KEY =
3+
4+
PORT =
5+
BASE_URL =
6+
FRONTEND_URL =
7+
GOOGLE_CLIENT_ID =
8+
GOOGLE_CLIENT_SECRET =

app.js

+7-9
Original file line numberDiff line numberDiff line change
@@ -14,28 +14,26 @@ const authRouter = require('./routes/api/auth');
1414
const booksRouter = require("./routes/api/books");
1515
const statsRouter = require("./routes/api/stats");
1616

17-
1817
const app = express();
1918

2019
const formatsLogger = app.get("env") === "development" ? "dev" : "short";
2120

2221
app.use(logger(formatsLogger));
2322
app.use(cors());
2423
app.use(express.json());
25-
// app.use('/', swaggerUi.serve, swaggerUi.setup(swaggerDocument));
24+
2625
app.use(express.static("public"))
2726

28-
app.use('/api/auth', authRouter);
27+
app.use('/api/users', authRouter);
2928
app.use('/link', (req, res) => {
30-
res.sendFile(path.join(__dirname, "./public/link.html"));
31-
});
32-
29+
res.sendFile(path.join(__dirname, "./public/link.html"));
30+
});
3331
app.use("/api/books", booksRouter);
3432
app.use("/api/training", statsRouter);
35-
36-
3733
// app.use("/api/stats", statsRouter);
3834

35+
app.use('/', swaggerUi.serve, swaggerUi.setup(swaggerDocument));
36+
3937
app.use((req, res) => {
4038
res.status(404).json({ message: "Not found" });
4139
});
@@ -45,4 +43,4 @@ app.use((req, res) => {
4543
res.status(status).json({ message });
4644
});
4745

48-
module.exports = app;
46+
module.exports = app;

public/link.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@
77
<title>Google OAUTH2.0</title>
88
</head>
99
<body>
10-
<a href="http://localhost:3001/api/auth/google">Click me to authorize with Google </a>
10+
<a href="http://localhost:3001/api/users/google">Click me to authorize with Google</a>
1111
</body>
1212
</html>

routes/api/auth.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ const {googleAuth, googleRedirect} = require('../google/auth_controller');
99

1010
const router = express.Router()
1111

12-
router.post('/users/signup', validationBody(schemas.singupSchema) ,ctrlWrapper(controller.signup));
12+
router.post('/signup', validationBody(schemas.singupSchema) ,ctrlWrapper(controller.signup));
1313

14-
router.post('/users/login', validationBody(schemas.loginSchema), ctrlWrapper(controller.login));
14+
router.post('/login', validationBody(schemas.loginSchema), ctrlWrapper(controller.login));
1515

16-
router.get('/users/logout', authenticate, ctrlWrapper(controller.logout));
16+
router.get('/logout', authenticate, ctrlWrapper(controller.logout));
1717

18-
router.get('/users/current', authenticate, ctrlWrapper(controller.currentUser));
18+
router.get('/current', authenticate, ctrlWrapper(controller.currentUser));
1919

2020
router.get('/google', ctrlWrapper(googleAuth));
2121
router.get('/google-redirect', ctrlWrapper(googleRedirect));

routes/google/auth_controller.js

+32-54
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
const queryString = require('query-string');
2-
// npm install query-string
32
const axios = require('axios');
4-
// npm install axios
53
const { v4 } = require('uuid');
64

7-
const { User } = require('../../models/user');
85
const bcrypt = require('bcryptjs');
96
const jwt = require('jsonwebtoken');
7+
8+
const { User } = require('../../models/user');
109
const { SECRET_KEY } = process.env;
1110

11+
// GOOGLE ************************************************
1212
const googleAuth = async (req, res) => {
1313
const stringifiedParams = queryString.stringify({
1414
client_id: process.env.GOOGLE_CLIENT_ID,
15-
redirect_uri: `${process.env.BASE_URL}/api/auth/google-redirect`,
15+
redirect_uri: `${process.env.BASE_URL}/api/users/google-redirect`,
1616
scope: [
1717
"https://www.googleapis.com/auth/userinfo.email",
1818
"https://www.googleapis.com/auth/userinfo.profile",
@@ -21,91 +21,69 @@ const googleAuth = async (req, res) => {
2121
access_type: "offline",
2222
prompt: "consent"
2323
});
24-
console.log('1');
2524
return res.redirect(
2625
`https://accounts.google.com/o/oauth2/v2/auth?${stringifiedParams}`
2726
)
2827
};
2928

3029
const googleRedirect = async (req, res) => {
31-
console.log('2');
30+
// console.log('googleRedirect ');
3231
const fullUrl = `${req.protocol}://${req.get("host")}${req.originalUrl}`;
33-
3432
const urlObj = new URL(fullUrl);
3533
const urlParams = queryString.parse(urlObj.search);
36-
3734
const code = urlParams.code;
38-
console.log(`code: ${code}`);
39-
35+
// console.log(`code: ${code}`);
4036
const tokenData = await axios({
4137
url: `https://oauth2.googleapis.com/token`,
4238
method: "post",
4339
data: {
4440
client_id: process.env.GOOGLE_CLIENT_ID,
4541
client_secret: process.env.GOOGLE_CLIENT_SECRET,
46-
redirect_uri: `${process.env.BASE_URL}/api/auth/google-redirect`,
42+
redirect_uri: `${process.env.BASE_URL}/api/users/google-redirect`,
4743
grant_type: "authorization_code",
4844
code,
4945
},
5046
});
51-
console.log('3');
52-
5347
const userData = await axios({
5448
url: "https://www.googleapis.com/oauth2/v2/userinfo",
5549
method: "get",
56-
headers: {
57-
Authorization: `Bearer ${tokenData.data.access_token}`,
58-
},
50+
headers: { Authorization: `Bearer ${tokenData.data.access_token}`},
5951
});
60-
console.log(`userData.email ${userData.data.email}`);
61-
console.log(`userData.name ${userData.data.name}`);
52+
// console.log(`userData.email ${userData.data.email}`);
53+
// console.log(`userData.name ${userData.data.name}`);
6254
// GOOGLE END********************************************
6355

6456
// SINGUP *********************************************
65-
const googleEmail = userData.data.email;
66-
const googleName = userData.data.name;
67-
const email = googleEmail;
68-
const name = googleName
69-
// const checkUser = await User.findOne({ googleEmail });
70-
71-
const user = await User.findOne({ email });
72-
console.log('4/1')
73-
if (user) {
74-
console.log(`user: ${user.name} found!`)
57+
const email = userData.data.email;
58+
const name = userData.data.name;
59+
let user = await User.findOne({ email });
60+
if (!user) {
61+
// console.log(`user not found!`)
62+
// const password = "111111";
63+
const password = v4();
64+
const hashPassword = await bcrypt.hash(password, 10);
65+
await User.create({ name, email, password: hashPassword });
66+
console.log(`User was created`)
7567
}
76-
77-
// const password = "111111";
78-
const password = v4();
79-
// const hashPassword = await bcrypt.hash(password, 10);
80-
await User.create({ name, email, password });
81-
console.log('4')
82-
// }
8368
// ***************************************************
8469

8570
// LOGIN *********************************************
86-
// const user = await User.findOne({ email });
87-
console.log('user', user)
88-
89-
const peyload = {
90-
id: user._id
91-
}
92-
console.log('peyload', peyload)
71+
user = await User.findOne({ email });;
72+
const peyload = { id: user._id };
9373
const token = jwt.sign(peyload, SECRET_KEY, { expiresIn: "24h" });
94-
console.log('token', token)
95-
await User.findByIdAndUpdate(user._id, { token });
96-
// res.json({
97-
// token,
98-
// });
99-
console.log('5');
74+
await User.findByIdAndUpdate(user._id, { token });
75+
res.json({
76+
token,
77+
});
78+
console.log('Login is successful');
10079
// ***************************************************
101-
102-
return res.redirect(
103-
`${process.env.FRONTEND_URL}?email=${userData.data.email}&name=${userData.data.name}`
104-
)
80+
// return res.redirect(
81+
// `${process.env.FRONTEND_URL}?email=${userData.data.email}`
82+
// // `${process.env.FRONTEND_URL}?token=${token}`
83+
// )
10584
}
10685

10786
module.exports = {
10887
googleAuth,
10988
googleRedirect,
110-
};
111-
89+
};

routes/google/auth_router.js

-5
This file was deleted.

0 commit comments

Comments
 (0)