문의 시, 사용하시는 개발환경과 디벨로퍼스 앱ID를 알려주세요.
826557 입니다.
Express 사용해서 카카오 로그인이랑 연동 구현하려고
authRouter.get("/connect/kakao-t", passport.authorize("kakao"));
authRouter.get(
"/connect/kakao-t/callback",
passport.authorize("kakao", {
failureRedirect: ""
}),
setCookieAndRedirectWebConnect()
);
authRouter.get("/kakao-t", passport.authenticate("kakao"));
authRouter.get(
"/kakao-t/callback",
passport.authenticate("kakao", {
failureRedirect: ""
}),
setCookieAndRedirectWeb()
);
라우터는 이렇게 설정해 놓았고
export default () => {
// 로그인
passport.use(
new KakaoStrategy(
{
clientID: "asdf",
clientSecret: "",
callbackURL: "https://aws.rcloset.biz/api/v1/auth/kakao-t/callback",
passReqToCallback: true
},
async (req, accessToken, _refreshToken, profile, cb) => {
const { has_email, email, name: _name } = profile._json.kakao_account;
if (!has_email || !email) {
return cb(null, false, { message: accessToken, type: KakaoStrategyError });
}
const socialId = profile._json.id.toString();
if (!socialId) {
return cb(null, false, { message: accessToken, type: KakaoStrategyError });
}
const user = await getUserByEmail({ email, type: SocialType.Kakao, socialId }, prisma);
const kUser = await getUserBySocialTestService({ type: SocialType.Kakao, socialId }, prisma);
if (!user) {
const createdUser = await createUser(
{ user: { email }, meta: { role: Role.User }, social: { type: SocialType.Kakao, socialId } },
prisma
);
const data = {
id: createdUser.id,
email: createdUser.email,
name: createdUser.name,
role: createdUser.meta!.role,
type: SocialType.Kakao,
profile: createdUser.profile!
};
return cb(null, { ...data, token: {
kakao: accessToken
} });
}
const data = {
id: user.id,
email: user.email,
name: user.name,
role: user.meta!.role,
type: SocialType.Kakao,
profile: user.profile!
};
return cb(null, { ...data, token: {
kakao: accessToken
} });
})
);
// 연동 passReqToCallback으로 연동 로그인 구분해야하나?
passport.use(
new KakaoStrategy(
{
clientID: "asdf",
clientSecret: "",
callbackURL: "https://aws.rcloset.biz/api/v1/auth/connect/kakao-t/callback",
},
async ( accessToken, _refreshToken, profile, cb) => {
const { has_email, email, name: _name } = profile._json.kakao_account;
if (!has_email || !email) {
return cb(null, false, { message: accessToken, type: KakaoStrategyError });
// return cb(new BadReqError("Not Found Email"));
}
const socialId = profile._json.id.toString();
if (!socialId) {
return cb(null, false, { message: accessToken, type: KakaoStrategyError });
}
const social = await getUserBySocialService({ type: SocialType.Kakao, socialId }, prisma);
const data = {
social: social,
type: SocialType.Kakao,
socialId: socialId,
token: {
google: accessToken
},
}
return cb(null, data as any);
})
);
};
패스포트는 이렇게 설정했습니다.
/kakao-t
로 접근했는데 자꾸 콜백이 /connect/kakao-t
부분인 passport.use가 실행이 되요.
구글 passport도 위와 같은 형태로 되어있는데 구글 쪽은 authenticate 및 authorize 각자 잘되요 뭐가 문제일까요 흑흑