티스토리 뷰

시리즈/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 구글 인증 과정 

 

 

 

'시리즈 > Web' 카테고리의 다른 글

authorization 방법들 비교 (쿠키, 세션, JWT)  (0) 2021.05.07
쿠키, 세션, passport.js  (0) 2021.04.30
proxy와 CORS 2편  (0) 2021.04.22
proxy와 CORS 1편  (1) 2021.04.22
Real Time Web 선택지 비교  (0) 2021.02.16
댓글
공지사항
최근에 올라온 글