[인증] OAuth (passport-google-oauth20로 테스트)

jiseong·2021년 12월 13일
0

T I Learned

목록 보기
154/291

OAuth

OAuth(OpenAuthorization)

서비스제공자가 다른서비스에게 데이터를제공하기위해 서비스 사용자에게 제공하는 사용자인증방식의 표준 프로토콜

  • 서비스 제공자(service provider): OAuth를 통해 접근을 지원하는 쪽(e.g. Google, Facebook, etc...)

passport-google-oauth20는 손쉽게 구글OAuth 2.0 을구현해주는 라이브러리

동작 방식(구글 로그인 예시)

  1. 구글 로그인 버튼 클릭
td(colspan="2"): a(href="/auth/google")
   button(type="button") 구글 로그인
  1. 구글 로그인 페이지 제공
router.get('/google', passport.authenticate('google', { scope: ['profile', 'email'] }));
const GoogleStrategy = require('passport-google-oauth20').Strategy;

const config = {
  clientID: 'clientID설정',
  clientSecret: 'clientSecret설정',
  callbackURL: "/auth/google/callback"
};

module.exports = new GoogleStrategy(config, async (accessToken, refreshToken, profile, done) => {
  const { email, name } = profile._json;
  console.log(profile)

  // 생략...
});

서비스 제공자로부터 제공받는 정보를 프로필, 이메일로 제한해두었기 때문에 위와 같은 코드로 작성하였다.

3~7. 제공받은 페이지에서 로그인 성공 시 콜백함수의 파라미터로 사용자 프로필, accessToken, refreshToken등을 받아 이 후 서버에서 필요한 작업을 진행하면 된다.


new GoogleStrategy(config, async (accessToken, refreshToken, profile, done) => {
  const { email, name } = profile._json;
  console.log(profile);
  console.log(accessToken);

  // 이후 해당 정보들을 이용하여 DB에서 조회 후 유저를 찾아 세션 또는 토큰방식을 사용하여 인증 진행
});

만약 로그인이 실패된다면 다시 로그인 페이지로 이동된다.

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

Reference

0개의 댓글