Newer
Older
import { GoogleLogin } from "@react-oauth/google";
import { GoogleOAuthProvider } from "@react-oauth/google";
import { useNavigate, Navigate } from "react-router-dom";
import { useCookies } from 'react-cookie'
// 안써도 자동으로 한국 시간을 불러온다. 명확하게 하기 위해 import
import moment from 'moment';
import 'moment/locale/ko';
const [cookies, setCookie, removeCookie] = useCookies();
const clientId = '716858812522-rb0pfisq317unkh4so5hvbu16p19kqp8.apps.googleusercontent.com'
const navigate = useNavigate();
const goMain = () => {
navigate("/main");
}
return (
<>
<GoogleOAuthProvider clientId={clientId}>
<GoogleLogin
onSuccess={(res) => {
/* 발급받은 토큰은 . 을 기준으로 3 개로 나뉜다.
aaaa.bbbb.cccc
[base64]aaaa: 헤더
[base64]bbbb: 페이로드 (실질적인 데이터)
[RS256]cccc: 서명
RS256 : 암호화 알고리즘, JWT 서명할 때 사용한다고 함
*/
// 쿠키 테스트 1분 뒤 만료
const expires = moment().add('1','m').toDate()
setCookie('cookieTest','hello',{expires})
let datas = res.credential.split('.')
const obj = JSON.parse(b64DecodeUnicode(datas[1]));
// 토큰을 보내 로그인 로직 처리
// 로그인이 정상적으로 되었다면 쿠키를 등록
let response = requestLogin(obj);
console.log(cookies.jwt)
if (response) {
goMain();
}
}}
onFailure={(err) => {
console.log("Login Failed");
console.log(err);
}}
/>
</GoogleOAuthProvider>
</>
);
// Going backwards: from bytestream, to percent-encoding, to original string.
return decodeURIComponent(atob(str)
.split('').map(function (c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
const response = await axios({
url: 'http://localhost:8080/login', // 통신할 웹문서
method: 'post', // 통신할 방식
data: payloadObj
});
console.log(response)
if (response.status === 200) {
return response.data;
}
else {
return null;
}