이승윤

feat: facebook login -> google login

...@@ -3,6 +3,7 @@ var router = express.Router(); ...@@ -3,6 +3,7 @@ var router = express.Router();
3 var UserModel = require('../models/UserModel'); 3 var UserModel = require('../models/UserModel');
4 var passport = require('passport'); 4 var passport = require('passport');
5 var FacebookStrategy = require('passport-facebook').Strategy; 5 var FacebookStrategy = require('passport-facebook').Strategy;
6 +const GoogleStrategy = require('passport-google-oauth20').Strategy;
6 7
7 passport.serializeUser(function (user, done) { 8 passport.serializeUser(function (user, done) {
8 done(null, user); 9 done(null, user);
...@@ -12,60 +13,60 @@ passport.deserializeUser(function (user, done) { ...@@ -12,60 +13,60 @@ passport.deserializeUser(function (user, done) {
12 done(null, user); 13 done(null, user);
13 }); 14 });
14 15
15 -passport.use(new FacebookStrategy({ 16 +passport.use(
16 - // https://developers.facebook.com에서 appId 및 scretID 발급 17 + new GoogleStrategy(
17 - clientID: "863352300499259", //입력하세요 18 + {
18 - clientSecret: "36867723fbdd49dac987f9a061e2206a", //입력하세요. 19 + clientID:
19 - callbackURL: "http://localhost:3000/auth/facebook/callback", 20 + '912554148550-gq86jjjgc022b1eit50mboh5lq48covi.apps.googleusercontent.com',
20 - profileFields: ['id', 'displayName', 'photos', 'email'] //받고 싶은 필드 나열 21 + clientSecret: '_EzuXeN7eNCTbcGQUV4kY1pN',
22 + callbackURL: 'http://localhost:3000/auth/google/callback',
23 + profileFields: ['id', 'displayName', 'photos', 'email'], //받고 싶은 필드 나열
21 }, 24 },
22 - function(accessToken, refreshToken, profile, done) { 25 + function (accessToken, refreshToken, profile, done) {
23 - //아래 하나씩 찍어보면서 데이터를 참고해주세요. 26 + UserModel.findOne(
24 - //console.log(profile); 27 + { username: 'goo_' + profile.id },
25 - //console.log(profile.displayName); 28 + function (err, user) {
26 - //console.log(profile.emails[0].value); 29 + if (!user) {
27 - //console.log(profile._raw); 30 + //없으면 회원가입 후 로그인 성공페이지 이동
28 - //console.log(profile._json); 31 + var regData = {
29 - UserModel.findOne({ username : "fb_" + profile.id }, function(err, user){ 32 + //DB에 등록 및 세션에 등록될 데이터
30 - if(!user){ //없으면 회원가입 후 로그인 성공페이지 이동 33 + username: 'goo_' + profile.id,
31 - var regData = { //DB에 등록 및 세션에 등록될 데이터 34 + password: 'google_login',
32 - username : "fb_" + profile.id, 35 + displayname: profile.displayName,
33 - password : "facebook_login",
34 - displayname : profile.displayName
35 }; 36 };
36 var User = new UserModel(regData); 37 var User = new UserModel(regData);
37 - User.save(function(err){ //DB저장 38 + User.save(function (err) {
38 - done(null,regData); //세션 등록 39 + //DB저장
40 + done(null, regData); //세션 등록
39 }); 41 });
40 - }else{ //있으면 DB에서 가져와서 세션등록 42 + } else {
41 - done(null,user); 43 + //있으면 DB에서 가져와서 세션등록
44 + done(null, user);
42 } 45 }
43 -
44 - });
45 } 46 }
46 -)); 47 + );
48 + }
49 + )
50 +);
47 51
48 // http://localhost:3000/auth/facebook 접근시 facebook으로 넘길 url 작성해줌 52 // http://localhost:3000/auth/facebook 접근시 facebook으로 넘길 url 작성해줌
49 -router.get('/facebook', passport.authenticate('facebook', { scope: 'email'}) ); 53 +router.get('/google', passport.authenticate('google', { scope: ['profile'] }));
50 -
51 54
52 //인증후 페이스북에서 이 주소로 리턴해줌. 상단에 적은 callbackURL과 일치 55 //인증후 페이스북에서 이 주소로 리턴해줌. 상단에 적은 callbackURL과 일치
53 -router.get('/facebook/callback', 56 +router.get(
54 - passport.authenticate('facebook', 57 + '/google/callback',
55 - { 58 + passport.authenticate('google', {
59 + failureRedirect: '/auth',
56 successRedirect: '/', 60 successRedirect: '/',
57 - failureRedirect: '/auth/facebook/fail' 61 + })
58 - }
59 - )
60 ); 62 );
61 //로그인 성공시 이동할 주소 63 //로그인 성공시 이동할 주소
62 -router.get('/facebook/success', function(req,res){ 64 +router.get('/google/success', function (req, res) {
63 res.send(req.user); 65 res.send(req.user);
64 }); 66 });
65 67
66 -router.get('/facebook/fail', function(req,res){ 68 +router.get('/google/fail', function (req, res) {
67 - res.send('facebook login fail'); 69 + res.send('google login fail');
68 }); 70 });
69 71
70 -
71 module.exports = router; 72 module.exports = router;
......
...@@ -23,8 +23,8 @@ ...@@ -23,8 +23,8 @@
23 <!-- Change this to a button or input when using this as a form --> 23 <!-- Change this to a button or input when using this as a form -->
24 <div class="d-grid gap-2 col-11 mx-auto p-2"> 24 <div class="d-grid gap-2 col-11 mx-auto p-2">
25 <input type="submit" class="btn btn-lg btn-success btn-block" value="가입하기"> 25 <input type="submit" class="btn btn-lg btn-success btn-block" value="가입하기">
26 - <a href="/auth/facebook" class="btn btn-lg btn-primary btn-block"> 26 + <a href="/auth/google" class="btn btn-lg btn-danger btn-block">
27 - <i class="fa fa-facebook" aria-hidden="true"></i> 페이스북 회원가입 27 + <i class="fa fa-google" aria-hidden="true"></i> Google 회원가입
28 </a> 28 </a>
29 </div> 29 </div>
30 </fieldset> 30 </fieldset>
......
...@@ -22,8 +22,8 @@ ...@@ -22,8 +22,8 @@
22 <!-- Change this to a button or input when using this as a form --> 22 <!-- Change this to a button or input when using this as a form -->
23 <div class="d-grid gap-2 col-11 mx-auto p-2"> 23 <div class="d-grid gap-2 col-11 mx-auto p-2">
24 <input type="submit" class="btn btn-lg btn-success btn-block" value="로그인"> 24 <input type="submit" class="btn btn-lg btn-success btn-block" value="로그인">
25 - <a href="/auth/facebook" class="btn btn-lg btn-primary btn-block"> 25 + <a href="/auth/google" class="btn btn-lg btn-danger btn-block">
26 - <i class="fa fa-facebook" aria-hidden="true"></i> 페이스북 로그인 26 + <i class="fa fa-google" aria-hidden="true"></i> Google 로그인
27 </a> 27 </a>
28 </div> 28 </div>
29 </fieldset> 29 </fieldset>
......