시리즈/Web

passport.js의 OAuth2.0

빅또리 2021. 4. 30. 22:01

😎 2021.04.30 - [WEB] - 쿠키, 세션, passport.js

 

 

지난시간 localstrategy 복습

 

인증 요청

이후 모든 요청

 

 

 

 

 

 

 

OAuth2.0

delegating user authentication to the service that hosts the user account, and authorizing third-party applications to access the user account.

이부분은 나중에 까먹으면 생활코딩 OAuth2.0 강의를 또 듣자...

 

 

 

 

 

 

google login 간단한 구현 코드

1편과 동일한데 strategy 만 local => google로 바꿨다.

const express = require('express');
const app = express();
const http = require('http');
const server = http.createServer(app);
//db (세션저장소로 사용할)
const lowdb = require('lowdb');
const FileSync = require('lowdb/adapters/FileSync');
const adapter = new FileSync('./db/session.json', { defaultValue: { sessions: [] }});
const db = lowdb(adapter);
//session
const session = require('express-session')
const LowdbStore = require('lowdb-session-store')(session);
//passport
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
const googleConfig = require('./google.json');             //client ID, client Secret 등의 정보 저장한 json

app.use(express.urlencoded({ extended: false }));
app.use(session({
  secret: 'keyboard cat',
  resave: false,
  saveUninitialized: true,
  store: new LowdbStore(db.get('sessions'), {
    ttl: 86400
  }),
}))
app.use(passport.initialize());
app.use(passport.session());

passport.serializeUser(function(user, done) {
  console.log("serializeuser");
  done(null, user.name);           
});
passport.deserializeUser(function(id, done) {
  console.log("deserializeuser");
  done(null, id.givenName);      
});

passport.use(new GoogleStrategy({
    clientID: googleConfig.web.client_id,
    clientSecret: googleConfig.web.client_secret,
    callbackURL: googleConfig.web.redirect_uris[0]
  },
  function(accessToken, refreshToken, profile, done) {
       console.log(accessToken,refreshToken,profile)
       done(null,profile);
  }
));

//server logic
app.get('/', (req, res) => {
  res.send(req.user? `welcome ${req.user} ~!` : "who are you?");
});

app.get('/login', (req, res) => {
  res.sendFile(__dirname + '/passport.html');
});

app.get('/login/google',
  passport.authenticate('google', { scope: ['https://www.googleapis.com/auth/plus.login']}));

app.get('/login/google/callback', 
passport.authenticate('google', { failureRedirect: '/login' }),
function(req, res) {
res.redirect('/');
});

server.listen(3000, () => {
  console.log('listening on 3000 port');
});

 

 

 

 

 

 

passport.js 구글 인증 과정