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 로 전송 성공!