카카오톡 로그인 및 연동

문의 시, 사용하시는 개발환경과 디벨로퍼스 앱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 각자 잘되요 뭐가 문제일까요 흑흑

안녕하세요.

redirect_uri 에 /connect/kakao-t 부분이 전달되었습니다.
현재는 다른 redirect_uri 를 사용하여 정상 동작하시는 것으로 보입니다.