- next.js와 스프링 협업으로 카카오 로그인 구현하기
- 프론트엔드단의 구현 과정에서 oauth 소셜 로그인 경험한 것을 기록
- 사용한 기술: next.js, react, typescript, redux toolkit
- 정말 무수히 많은 문서와 블로그 글을 봤다. 잘못된 방법도 있었고 진행 과정에서 조금씩 방법론이 다 다르기 때문에 더 헷갈리고 어려웠다. ㅠㅠ
- 내 글이 정답이 아니기 때문에 참고 정도만 하시기를 부탁드린다.
Spring-React-카카오-소셜-로그인-JWT
스프링과 협업을 하신다면 참고하기 좋은 블로그.
백엔드와 소통을 원활히 하기 위해 백엔드 과정도 이해하고 싶다면 이 블로그를 추천한다.
수많은 로직보다는 텍스트가 있어서 백엔드 지식이 많지 않은 본인에게도 로그인 과정을 이해하는 데 도움이 됐다.
우리는 oauth를 이용한 카카오 소셜 로그인을 사용할 것이고 JWT 토큰을 이용할 것이다.
REST-API 활용한 카카오 소셜 로그인 구현(feat. React)
이 블로그에서 설명한 과정을 가장 많이 참고했다. 감사합니다 :,)
// kakao_login
const KAKAO_REST_API_KEY = process.env.KAKAO_CLIENT_ID;
const KAKAO_REDIRECT_URI = "http://localhost:3000/login/kakao";
export const KAKAO_AUTH_URL = `https://kauth.kakao.com/oauth/authorize?client_id=${KAKAO_REST_API_KEY}&redirect_uri=${KAKAO_REDIRECT_URI}&response_type=code`;
let code = new URL(window.location.href).searchParams.get("code");
const response = await axios.get(
`${API 서버 주소}/oauth/token?code=${code}`,
{ withCredentials: true }
);
http://localhost:3000/login/kakao?code=긴 코드
yarn add react-cookies
const response = await axios.get(`/oauth/token?code=${code}`, {
withCredentials: true,
});
const { accessToken } = response.data;
const { refreshToken } = response.data;
cookie.save("accessToken", accessToken, {
path: "/",
});
cookie.save("refreshToken", refreshToken, {
path: "/",
});
setToken;
dispatch(setToken(accessToken));
const accessToken = cookie.load("accessToken");
useEffect(() => {
console.log(accessToken);
const response = async () => {
if (accessToken) {
const userRes = await axios.get(`/loginInfo`, {
headers: {
"Access-Token": accessToken,
},
withCredentials: true,
});
const { id, nickName, email } = userRes.data.data;
dispatch(setId(id));
dispatch(setEmail(email));
dispatch(setNickname(nickName));
setUser(userRes.data.data);
console.log(userRes.data.data);
}
};
response();
}, [accessToken]);
const handleLogout = () => {
cookie.remove("accessToken", { path: "/" });
dispatch(setToken(""));
dispatch(setNickname(""));
dispatch(setEmail(""));
dispatch(setId(0));
};
하지만 여기서 문제가 있었다. ㅠㅠ
-다음 이 시간에,,, -
정보도 얻어가고 내용도 흥미진진하네요 .. 👍