Skip to content
Snippets Groups Projects
GoogleLoginButton.js 2.1 KiB
Newer Older
Gwangbin's avatar
Gwangbin committed
import { GoogleLogin } from "@react-oauth/google";
import { GoogleOAuthProvider } from "@react-oauth/google";
import { useNavigate, Navigate } from "react-router-dom";
Hyun Woo Jeong's avatar
Hyun Woo Jeong committed
import { useCookies } from 'react-cookie'
Hyun Woo Jeong's avatar
Hyun Woo Jeong committed
import React, { useEffect, useState, useContext} from 'react';
import { UserContext } from './Usercontext.js';
Hyun Woo Jeong's avatar
Hyun Woo Jeong committed

// 안써도 자동으로 한국 시간을 불러온다. 명확하게 하기 위해 import
import moment from 'moment';
import 'moment/locale/ko';
import base64 from 'base-64';
import axios from 'axios';
Hyun Woo Jeong's avatar
Hyun Woo Jeong committed
axios.defaults.withCredentials = true;
Hyun Woo Jeong's avatar
Hyun Woo Jeong committed

const GoogleLoginButton = () => {
Hyun Woo Jeong's avatar
Hyun Woo Jeong committed
	
  const setUserName = useContext(UserContext);

Hyun Woo Jeong's avatar
Hyun Woo Jeong committed
  const [cookies, setCookie, removeCookie] = useCookies();
Gwangbin's avatar
Gwangbin committed
  const clientId = '716858812522-rb0pfisq317unkh4so5hvbu16p19kqp8.apps.googleusercontent.com'
  const navigate = useNavigate();
Hyun Woo Jeong's avatar
Hyun Woo Jeong committed
  
Gwangbin's avatar
Gwangbin committed
  const goMain = () => {
Hyun Woo Jeong's avatar
Hyun Woo Jeong committed
    navigate("/");
Gwangbin's avatar
Gwangbin committed
  }
  return (
    <>
      <GoogleOAuthProvider clientId={clientId}>
        <GoogleLogin
          onSuccess={(res) => {
Hyun Woo Jeong's avatar
Hyun Woo Jeong committed
			
Gwangbin's avatar
Gwangbin committed
            let datas = res.credential.split('.')
            const obj = JSON.parse(b64DecodeUnicode(datas[1]));
Hyun Woo Jeong's avatar
Hyun Woo Jeong committed
	
			// 토큰을 보내 로그인 로직 처리
			// 로그인이 정상적으로 되었다면 쿠키를 등록

Hyun Woo Jeong's avatar
Hyun Woo Jeong committed
            let response = requestLogin(obj).then(
				(val) => {
					setUserName(val)
					goMain();
				}
			);
			
Gwangbin's avatar
Gwangbin committed
          }}
          onFailure={(err) => {
            console.log("Login Failed");
            console.log(err);
          }}
        />
      </GoogleOAuthProvider>
    </>
  );
function b64DecodeUnicode(str) {
Gwangbin's avatar
Gwangbin committed
  // 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);
    }).join(''));
}

Hyun Woo Jeong's avatar
Hyun Woo Jeong committed
async function requestLogin(payloadObj) {
Gwangbin's avatar
Gwangbin committed
  const response = await axios({
    url: 'http://localhost:8080/login', // 통신할 웹문서
    method: 'post', // 통신할 방식
    data: payloadObj
  });
  if (response.status === 200) {
    return response.data;
  }
  else {
    return null;
  }

export default GoogleLoginButton