analogcoding

PASSPORT 카카오 (KaKao)2 본문

Be well coding/Learn more

PASSPORT 카카오 (KaKao)2

be well 2019. 8. 1. 00:37

console.log 로 카카오로 부터 profile 객체를 전달 받는 것 까지 성공한 뒤 데이터를 확인해서 회원가입 , 로그인 상태 구현하기.

 

const kakaoSign = async (req, res) => {
  // login 에서는 받은  profile 을  DB 랑 비교한당  req.user = profile

  const { user } = req;
  const nickName = user.username;
  const email = user.id;
  const { provider } = user;

  console.log("provider-->", req.provider);
  return User.findOne({
    where: { email, nickName, admin: false, provider }
  })
    .then(data => {
      if (data) {
        console.log("data is case old-->", data);
        const token = createJWT({ id: data.id, nickName: data.nickName });
        res.send({
          isLogin: true,
          user: data,
          err: null,
          token
        });
        return;
      }
      return User.create({
        email,
        nickName,
        admin: false,
        provider
      }).then(newdata => {
        console.log("newdata is case new-->", newdata);
        const token = createJWT({
          id: newdata.id,
          nickName: newdata.nickName
        });
        res.send({
          isLogin: true,
          user: newdata,
          err: null,
          token
        });
      });
    })
    .catch(err => console.log(err));
};

profile 객체로 넘어온 정보를 DB 에서 findOne 으로 찾아서 그 data 가 존재한다면 토큰과 함께 리소스를 res.send  로 전달하고,

 

존재하지 않는다면 create 로 DB 에 profile 로 넘어온 newdata 를 저장한 뒤 , 리소스를 전달한다.

 

passport  도큐먼트나 다른 분들의 예제를 보면서 왜 findOrCreate 를 쓸까? 나는 로그인 따로 회원가입 따로 사용하고 싶은데

 

라는 의문이 들었는데 물론 해결할 수 있는 여러 방법이 있었겠지만  porfile 이 넘어오는 callbackURL 이 하나라서

 

따로 분기를 제대로 주지 못해서 결국 findOrCreate  를 사용했다. ( 물론 내 낮은 리딩능력 때문에 따로 따로..)

 

data 에 유무에 따라 분기를 나누고 에러처리를 해서 무사히 카카오에서 받아온 정보를 client 에서 활용할 수 있게 

 

res.send 로 전송 성공!

'Be well coding > Learn more' 카테고리의 다른 글

Apollo Cache  (0) 2019.08.08
Kakao MAP 사용하기  (0) 2019.08.08
PASSPORT 카카오 (KaKao)  (0) 2019.07.30
JWT in graphQL  (1) 2019.07.28
Sequelize  (0) 2019.07.27
Comments