소셜로그인 카카오와 네이버를 구현하기로 하였는데
카카오를 먼저 구현하였다
kakao JS key를 삽입해놓아야했는데 .env에 입력해놓은 값을 사용해야했다.
js파일과는 다르게 % %
로 env 값을 사용 할 수 있었다.
<script>
window.Kakao.init("%REACT_APP_KAKAO_JS_KEY%");
</script>
window에 있는 kakao 메소드를 뽑아와서 필요한 유저정보를 가져올 수 있었다.
email과 nickname을 받아와서 inOauth 값을 1로 지정해주어서
kakao endpoint로 post 요청을 보낸 뒤
201(회원가입)으로 요청을 받아왔다면 handler를 한번 더 실행하여
로그인이 되도록 연결해주었다
로그인이 완료 된 뒤에는 home으로 reload 시켜주었다
import axios from "axios"
function KakaoLoginClickHandler() {
const { Kakao } = window // 카카오 관련 method 사용가능하게(index.html head부분에도 추가된 부분있음)
Kakao.Auth.login({
scope: 'profile_nickname, account_email',
success: (authObj) => {
Kakao.API.request({
url: '/v2/user/me',
data: {
property_keys: ["kakao_account.email", "kakao_account.profile.nickname"]
},
success: async function (res) {
const email = res.kakao_account.email
const nickname = res.kakao_account.profile.nickname
const isOauth = 1
await axios.post(`${process.env.REACT_APP_SERVER_API}/user/kakao`,
{ email, nickname, isOauth },
{ withCredentials: true })
.then((res) => {
if (res.status === 201) {
KakaoLoginClickHandler()
} else {
/* 로그인 */
axios.post(`${process.env.REACT_APP_SERVER_API}/user/kakao`, { email })
.then((res) => {
console.log(res, 'kakao/response/if/201/login')
})
window.location.reload('/')
}
})
.catch((err) => {
console.log(err)
})
}
}
)
}
})
}
export default KakaoLoginClickHandler
html .env 연결하는 방법 :
https://stackoverflow.com/questions/49375867/how-do-you-reference-a-process-env-variable-in-html-script-src-react
이 부분 때문에 막혔는데 감사합니다.
window.Kakao.init(process.env.REACT_APP_KEY).
window.Kakao.init(process.env[%REACT_APP_KEY%]).
window.Kakao.init(%process.env.REACT_APP_KEY%)
window.Kakao.init(%REACT_APP_KEY%). 이렇게 시도를 다 해봤는데 안되다가 이 블로그에서 드디어 해결했네요. 복 받으세요~