카카오 로그인 구현 중 오류해결

박찬효·2023년 3월 22일
0

[ERR_HTTP_HEADERS_SENT]

node로 카카오 로그인을 구현하던 중 아래와 같은 오류가 발생했다.

[ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

[ERR_HTTP_HEADERS_SENT]는 서버가 클라이언트에 둘 이상의 응답을 보내려고 할때 발생하는 오류입니다.

code


async (accessToken, refreshToken, profile, done) => {
        console.log("profile", profile);
        try {
          const user = await User.findOne({
            where: { snsId: profile.id, provider: "kakao" },
          });
          if (user) {
            done(null, user);
          } else {
            const newUser = await User.create({
              email: profile._json?.kakao_account?.email,
              nick: profile.displayName,
              snsId: profile.id,
              provider: "kakao",
            });
            done(null, newUser);
          }
        } catch (error) {
          console.error(error);
          done(error);
        }
        done();
      }

위 코드에서 user가 있다면 로그인을 하게되고 만약 user가 없다면 새로운 유저를 생성한 다음 로그인을 하게된다. 하지만 여기서 로그인을 하였는데 밑에 있는 done()이 또 응답을 보내려고 하기때문에 오류가 발생하는 것이다.


해결 방법

async (accessToken, refreshToken, profile, done) => {
        console.log("profile", profile);
        try {
          const user = await User.findOne({
            where: { snsId: profile.id, provider: "kakao" },
          });
          if (user) {
            done(null, user);
          } else {
            const newUser = await User.create({
              email: profile._json?.kakao_account?.email,
              nick: profile.displayName,
              snsId: profile.id,
              provider: "kakao",
            });
            done(null, newUser);
          }
        } catch (error) {
          console.error(error);
          done(error);
        }
      }

둘 이상의 응답을 없애주고 하나만 하게 만들었더니 오류를 해결 할 수 있었다.

profile
개발자가 되기 위한 1인

0개의 댓글