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;)
      • Computer Science
        • Terminology and Concepts
        • Network
        • Operating System
        • Database
        • Data Structure
        • Web Development
      • Frontend
        • Javascript Essentials
        • Perfomance Optimization
        • JS Patterns
        • React
        • Next.js
        • Flutter
        • Testing
      • Backend
        • Node.js
      • DevOps
        • Docker & Kubernetes
      • Coding Test
        • LeetCode
        • 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
  • 블로그 메뉴

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

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

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바