Showing
3 changed files
with
52 additions
and
51 deletions
| ... | @@ -3,69 +3,70 @@ var router = express.Router(); | ... | @@ -3,69 +3,70 @@ 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); |
| 9 | }); | 10 | }); |
| 10 | 11 | ||
| 11 | passport.deserializeUser(function (user, done) { | 12 | 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", | 36 | + }; |
| 34 | - displayname : profile.displayName | 37 | + var User = new UserModel(regData); |
| 35 | - }; | 38 | + User.save(function (err) { |
| 36 | - var User = new UserModel(regData); | 39 | + //DB저장 |
| 37 | - User.save(function(err){ //DB저장 | 40 | + done(null, regData); //세션 등록 |
| 38 | - done(null,regData); //세션 등록 | 41 | + }); |
| 39 | - }); | 42 | + } else { |
| 40 | - }else{ //있으면 DB에서 가져와서 세션등록 | 43 | + //있으면 DB에서 가져와서 세션등록 |
| 41 | - done(null,user); | 44 | + done(null, user); |
| 42 | - } | 45 | + } |
| 43 | - | 46 | + } |
| 44 | - }); | 47 | + ); |
| 45 | } | 48 | } |
| 46 | -)); | 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', { |
| 56 | - successRedirect: '/', | 59 | + failureRedirect: '/auth', |
| 57 | - failureRedirect: '/auth/facebook/fail' | 60 | + successRedirect: '/', |
| 58 | - } | 61 | + }) |
| 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; | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 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> | ... | ... |
-
Please register or login to post a comment