Skip to content

Commit c683b57

Browse files
Krishna KantKrishna Kant
Krishna Kant
authored and
Krishna Kant
committedJul 28, 2023
Using Google-Oauth2 for creating User
1 parent fd6d01e commit c683b57

7 files changed

+158
-2
lines changed
 
+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
const passport = require("passport");
2+
const googleStrategy = require("passport-google-oauth").OAuth2Strategy;
3+
const crypto = require("crypto");
4+
// const { promisify } = require("util");
5+
const User = require("../models/user");
6+
7+
passport.use(
8+
new googleStrategy(
9+
{
10+
clientID:
11+
"122142816625-mnuj9cb21fdd9u1voer990b4macuoe8t.apps.googleusercontent.com",
12+
clientSecret: "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",
13+
callbackURL: "http://localhost:3000/users/auth/google/callback",
14+
},
15+
async function (accessToken, refreshToken, profile, done) {
16+
try {
17+
const user = await User.findOne({
18+
email: profile.emails[0].value,
19+
});
20+
21+
// console.log(accessToken, refreshToken);
22+
// console.log(profile);
23+
24+
if (user) {
25+
// If Found return from request
26+
return done(null, user);
27+
} else {
28+
// if not found, create the user and set it as req.user
29+
const newUser = User.create({
30+
name: profile.displayName,
31+
email: profile.emails[0].value,
32+
password: crypto.randomBytes(20).toString("hex"),
33+
});
34+
35+
return done(null, newUser);
36+
}
37+
} catch (err) {
38+
console.log("error in google strategy-passport", err);
39+
return done(err);
40+
}
41+
}
42+
)
43+
);
44+
45+
module.exports = passport;

‎index.js

+2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ const session = require("express-session");
1212
const passport = require("passport");
1313
const passportLocal = require("./config/passport-local-strategy");
1414
const passportJWT = require('./config/passport-jwt-strategy');
15+
const passportGoogle = require('./config/passport-google-oauth2-strategy');
16+
1517
const MongoStore = require("connect-mongo");
1618
const sassMiddleware = require("node-sass-middleware");
1719
const flash = require('connect-flash');

‎package-lock.json

+93
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
"connect-flash": "^0.1.1",
1515
"connect-mongo": "^5.0.0",
1616
"cookie-parser": "^1.4.6",
17+
"crypto": "^1.0.1",
1718
"ejs": "^3.1.9",
1819
"express": "^4.18.2",
1920
"express-ejs-layouts": "^2.5.1",
@@ -24,6 +25,7 @@
2425
"node-sass-middleware": "^1.0.1",
2526
"nodemon": "^2.0.22",
2627
"passport": "^0.6.0",
28+
"passport-google-oauth": "^2.0.0",
2729
"passport-jwt": "^4.0.1",
2830
"passport-local": "^1.0.0"
2931
}

‎routes/users.js

+6
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,10 @@ router.post('/create-session', passport.authenticate(
2323

2424
router.get('/sign-out', userController.destroySession);
2525

26+
27+
// For Google Oauth Strategy
28+
router.get('/auth/google', passport.authenticate('google', {scope: ['profile', 'email']}));
29+
30+
router.get('/auth/google/callback', passport.authenticate('google', {failureRedirect: '/users/sign-in'}), userController.createSession);
31+
2632
module.exports = router;

‎views/user_sign_in.ejs

+5-1
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,8 @@
44
<input type="email" name="email" placeholder="Enter email" required>
55
<input type="password" name="password" placeholder="Enter password" required>
66
<button type="submit">Sing In</button>
7-
</form>
7+
</form>
8+
9+
<p>
10+
<a href="/users/auth/google">Google Sign In / Sign Up</a>
11+
</p>

‎views/user_sign_up.ejs

+5-1
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,8 @@
66
<input type="password" name="password" placeholder="Enter password" required>
77
<input type="password" name="confirm_password" placeholder="Confirm password" required>
88
<button type="submit">Sing Up</button>
9-
</form>
9+
</form>
10+
11+
<p>
12+
<a href="/users/auth/google">Google Sign In / Sign Up</a>
13+
</p>

0 commit comments

Comments
 (0)
Please sign in to comment.