본문 바로가기
공부/노드

[passport-kakao] 카카오 로그인 API

by 야옹아옹 2021. 7. 1.
Node.js 교과서 9장을 진행하며 이해가 가지않거나, 중요하다고 생각하는 개념을 정리

 


kakaoStrategy

passportstrategy(전략)을 통해서, 여러 인증 방법을 사용할 수 있게한다. passport-kakao는 여러 인증 방법 중, 카카오 인증 방법을 사용할 수 있게해주는 패키지다.

따라서 카카오 인증 API를 사용하기 위해서 먼저 전략을 설립해야한다.

아래 코드는 kakao API와 passport를 이용하는 로그인 Starategy의 기본 코드이다.

// KakaoStrategy.js

const passport = require('passport'); // passport 
const KakaoStrategy = require('passport-kakao').Strategy; // 전략 생성자

const User = require('../models/index').User; // User ORM 모델

module.exports = () => {
passport.use(new KakaoStrategy({
    clientID : clientID,
    clientSecret: clientSecret, // clientSecret을 사용하지 않는다면 넘기지 말거나 빈 스트링을 넘길 것
    callbackURL : callbackURL
  },
  (accessToken, refreshToken, profile, done) => {
    // 사용자의 정보는 profile에 들어있다.
    User.findOrCreate(..., (err, user) => {
      if (err) { return done(err) }
      return done(null, user)
    })
  }
));
};

 

new KakaoStrategy( { 전략에 대한 설정 }, 전략으로 실행할 내용 함수 )

KakaoStrategy는 passport-kakao에서 가져온 Strategy 생성 메서드 이다.

전략에 대한 설정

  • clientID
    카카오 개발자 사이트에서 가져와야하는 코드
    REST API 키, JS키 둘 다 넣어도 되는데 공식 홈페이지에서는 JS키를 사용하고 책에서는 REST API를 씀.
  • callbackURL
    카카오로부터 인증 결과를 받아올 라우터
    ex ) /auth/kakao/callback

전략으로 실행할 함수

(accessToken, refreshToken, profile, done) => {
    // 사용자의 정보는 profile에 들어있다.
    User.findOrCreate(..., (err, user) => {
      if (err) { return done(err) }
      return done(null, user)
    })
  }

( accessToken, refreshToken, profile ) 이 세가지는 카카오에서 보내준 값들이 들어간다.

토큰

토큰은 매번 인증을 거치지 않고도 일정 기간 카카오 API를 사용할 수 있도록 하는 권한 증명

  • accessToken
    사용자를 인증합니다.
  • refreshToken
    일정 기간 동안 다시 인증 절차를 거치지 않고도 액세스 토큰 발급을 받을 수 있게 해 줍니다.
  • profile
    사용자 정보는 profile에 들어있다.

    profile 객체 안에는 사용자 정보가 들어있다.

    사용자 정보json 타입으로 얻고 싶다면, profile._json을 사용한다.
    콘솔을 찍어보면 많은 데이터가 들어있다. 여기서 얻은 사용자 데이터를 DB에 저장한다.

Kakao API에서 원하는 데이터를 가져오기위해서 설정을 변경하기

내가 가지고 오고 싶은 데이터를 내 어플리케이션 - 카카오 로그인 - 동의항목 에서 설정을 ON 해주어야한다.

카카오 디벨로퍼 페이지 - 내 어플리케이션

상태창 옆의 설정을 클릭

동의를 해주면 profile의 _json에 내가 ON 설정한 사용자 데이터들이 들어있다.

 

😢 profile._json에 내가 설정한 데이터가 없는 경우

내 상황

1. 이메일 정보를 ON으로 설정했는데 profile에 유저의 이메일 정보가 함께 넘어오지 않았다.

2. 이전에 카카오 로그인을 해보겠다고, 정보 수집 설정을 하기 전에 이미 DB에 카카오 계정 정보가 저장되어있었음.

3. kakaoStrategy에서 전략을 만들 때, 데이터베이스에 snsid와 provider를 통해 유저가 이미 가입되어있는지 찾아오도록 설정해 놓음

=> 즉, DB에는 이메일 정보만 null값으로 저장됬을 뿐, 카카오에서 로그인된 snsid와 provider가 이미 존재하기 때문에

db에서 snsid로 유저정보를 찾아와 보여줌 => db에는 이메일 값이 null이니까 당연히 계속 email : null...

const exUser = await User.findOne({
            where: { snsId: profile.id, provider: 'kakao' },
          });

4. db에서 kakao로 로그인된 로우(튜플)을 삭제하고 다시 로그인을 하니 해결됬다.

 


 

passport-kakao : http://www.passportjs.org/packages/passport-kakao/

 

passport-kakao

kakao oauth2 login module

www.passportjs.org

 

댓글