20210311 23일차 카카오, 구글 소셜 로그인 구현 완료(OAuth)

2021. 3. 12. 04:18·BootCamp_Codestates/Final Project

구현 사항

  • 카카오, 구글 소셜 로그인 및 로그아웃

  • 메인 페이지(로그인 화면) CSS 리팩토링 (파트별 크기)

카카오, 구글 소셜 로그인 및 로그아웃 구현

 

1. 카카오

카카오는 SDK 를 이용하여 구현했는데, 카카오 OAuth 의 경우, 유저의 이메일 제공 여부가 선택사항이기 때문에 아래와 같은 경우의 수가 발생한다. Email 이 제공되지 않았을 경우엔 바로 추가정보 기입 모달로 보내고, Email 이 제공된 경우는,

 

구현 상 크게 어려운 부분은 의외로 없었는데, 소셜 로그인 모달에서 추가정보 기입 모달로 이동 시킬때 상태 끌어올리기를 사용했는데, 좀 헷갈렸다.

 

유저가 로그아웃을 할 경우에는, 아래 로직으로 로컬 스토리지에 저장되어 있던 카카오 인증 엑세스 토큰을 삭제해준다.

	if (window.Kakao.Auth.getAccessToken()) {
						console.log("카카오 인증 엑세스 토큰 존재", window.Kakao.Auth.getAccessToken());
						window.Kakao.Auth.logout(() => {
							console.log("카카오 로그아웃 완료", window.Kakao.Auth.getAccessToken());
						});
					}

 

2. 구글

구글 소셜 로그인의 경우, 타입스크립트를 적용할 시 sdk 사용이 불가하여 구글 로그인 라이브러리를 사용하여 구현했다.

카카오 소셜 로그인과 마찬가지의 경우의 수를 갖기 때문에 어렵지 않게 구현할 수 있었다.

다만, 소셜 로그인 모달창에서 props 를 이용(상태끌어올리기)하여 추가기입 모달창을 띄우는데, 조금 헷갈렸다.

import { GoogleLogin } from "react-google-login";

중략

export default function SocialModal(props: Props): ReactElement {

중략

	const googleLogin = async (response: any) => {
		const emailOffered = response.Is.ot;
		await axios
			.post(
				"https://royal-diary.ml/users/isemail",
				{ email: emailOffered },
				{
					headers: { "Content-Type": "application/json" },
					withCredentials: true,
				}
			)
			.then((res) => {
				// 기 존재하는 회원일 경우, accesstoken 을 받기 때문에 바로 로그인 상태 변경 및 session 에 토큰 저장 필요
				// 존재하지 않는 회원일 경우, 추가정보 기입 모달창을 띄운다.
				if (res.data.message === "not exists") {
					conveySocialData(emailOffered, "google");
					setSocialModal();
					return;
				}
				const nicknameOffered = res.data.data.nickname;
				const accessTokenOffered = res.data.data.accessToken;
				sessionStorage.setItem("accessToken", accessTokenOffered);
				sessionStorage.setItem("isLogin", JSON.stringify(true));
				sessionStorage.setItem("nickName", nicknameOffered);
				setModalMessage("오늘은 어떤 일이 있었나요?:)");
				setModalVisible(true);
			})
			.catch((err) => {
				console.log(err);
			});
	};

	return (
		<Modal isOpen={modalIsOpen} style={ModalStyles}>
			<ModalBox>
				<Title>쏘샬 로그인으로 입장하기</Title>
				<Buttons>
					<ImgWrapper className="g-signin2">
						<GoogleLogin
							clientId="구글 클라이언트 아이디 기입"
							render={(renderProps) => (
								<GoogleBtn type="button" onClick={renderProps.onClick} disabled={renderProps.disabled}>
									<img src={googleLogo} style={logoStyle} alt="" />
								</GoogleBtn>
							)}
							buttonText="Login"
							onSuccess={googleLogin}
							onFailure={googleLogin}
							cookiePolicy="single_host_origin"
							style={{ backgroundColor: "red" }}
						/>
					</ImgWrapper>
					<ImgWrapper onClick={kakaoLogin}>
						<img src={kakaoLogo} style={logoStyle} alt="" />
					</ImgWrapper>
					<ImgWrapper>
						<img src={githubLogo} style={logoStyle} alt="" />
					</ImgWrapper>
				</Buttons>
				<BackBtn>
					<button onClick={closeModal} type="button" style={btnStyle}>
						뒤로 가기
					</button>
				</BackBtn>
			</ModalBox>
			<NotificationModal modalIsOpen={modalVisible} setIsOpen={setModalVisible} message={modalMessage} />
		</Modal>
	);
}

구글로부터 아래의 유저데이터를 받게 되는데, 구글의 경우 email 이 필수적으로 제공된다.

메인 페이지(로그인 화면) CSS 리팩토링 (파트별 크기)

바꾸는 중...

 

해야할일

  • 구글 엑세스 토큰의 경우, 로컬스토리지에 담기지 않는것 같다. 라이브러리를 사용해서 그런것 같긴한데, 어떻게 로그아웃을 시켜야 할지 좀 더 알아봐야겠다.

  • 이제와 생각해보니, 유저가 소셜 로그인으로 들어와 추가 정보를 기입할 때 a 이메일(유저 제공)로 들어와서 b 이메일(추가 정보 기입할 때 이메일 변경)로 가입을 하게 될경우 문제가 발생할 것 같다. 생각 좀 해봐야겠다.

  • 메뉴얼 페이지와 제작자 페이지 구현이 필요하다. 그리고 CSS와 반응형 웹을 더 손봐야겠다.

  • 클라이언트 https 배포

도움받은 사이트

카카오 로그아웃 하는법: webruden.tistory.com/272

React Google Login: www.npmjs.com/package/react-google-login

'BootCamp_Codestates > Final Project' 카테고리의 다른 글

20210313 25일차 제작자 페이지 구현 및 CSS  (0) 2021.03.14
20210312 24일차 제작자 페이지 구현중(80%)  (0) 2021.03.13
20210310 22일차 카카오 소셜 로그인 구현(중)  (0) 2021.03.11
20210309 21일차 그림일기장 수정 로직 구현  (0) 2021.03.10
20210308 20일차 그림판/일기장 로직 구현(99% 완성)  (0) 2021.03.09
'BootCamp_Codestates/Final Project' 카테고리의 다른 글
  • 20210313 25일차 제작자 페이지 구현 및 CSS
  • 20210312 24일차 제작자 페이지 구현중(80%)
  • 20210310 22일차 카카오 소셜 로그인 구현(중)
  • 20210309 21일차 그림일기장 수정 로직 구현
JTB
JTB
웹/앱 개발 정보를 공유하고 있습니다.
  • JTB
    JTechBlog
    JTB
  • 전체
    오늘
    어제
    • All About Programming;) N
      • Computer Science
        • Terminology and Concepts
        • Network
        • Operating System
        • Database
        • Data Structure
      • Frontend
        • Javascript Essentials
        • Perfomance Optimization
        • JS Patterns
        • Next.js
        • Flutter
      • Backend
        • Node.js
      • DevOps
        • Docker & Kubernetes
      • Coding Test N
        • LeetCode N
        • Programmers
      • Tech Books & Lectures
        • Javascript_Modern JS Deep d..
        • Network_IT 엔지니어를 위한 네트워크 입문
      • Projects
        • PolyLingo_2025
        • Build Your Body_2024
        • JStargram_2021
        • Covid19 Tracker_2021
        • JPortfolio_2021
      • BootCamp_Codestates
        • TIL
        • TILookCloser
        • Pre Tech Blog
        • IM Tech Blog
        • Daily Issues and DeBugging
        • First Project
        • Final Project
        • Sprint Review
        • Good to Know
        • Socrative Review
        • HTML &amp; CSS
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 글쓰기
    • 관리
  • 공지사항

  • 인기 글

  • 태그

    need a database
    모던 자바스크립트 Deep Dive
    CPU scheduling algorithm
    자바스크립트 딥다이브
    testing
    structure of os
    VoiceJournal
    TCP/IP
    Binary Tree BFS
    indie hacker
    Data Structure
    Time complexity and Space complexity
    딥다이브
    프론트엔드 성능 최적화 가이드
    이벤트
    Threads and Multithreading
    JavaScript
    커리어
    스코프
    leetcode
    DOM
    js pattern
    Shared resources
    Network
    How memory manage data
    Operating System
    database
    mobile app
    자바스크립트
    polylingo
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
JTB
20210311 23일차 카카오, 구글 소셜 로그인 구현 완료(OAuth)
상단으로

티스토리툴바