일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- unique identifiers
- 딥다이브
- 자바스크립트 패턴
- 자바스크립트 딥다이브
- 스코프
- 이미지 갤러리 최적화
- version management
- package management
- const
- middleware pattern
- 제너레이터와 async/await
- mixin pattern
- 모던 자바스크립트 Deep Dive
- 이벤트
- 프로그래머스
- 새 코드 받아오기
- peerdependencies
- js pattern
- 자바스크립트
- pr review
- 커리어
- 올림픽 통계 서비스 최적화
- 브라우저의 렌더링 과정
- Babel과 Webpack
- js pattern
- 블로그 서비스 최적화
- DOM
- 프론트엔드 성능 최적화 가이드
- 진행기록
- 학습내용정리
- Today
- Total
Dev Blog
20210311 23일차 카카오, 구글 소셜 로그인 구현 완료(OAuth) 본문
20210311 23일차 카카오, 구글 소셜 로그인 구현 완료(OAuth)
Nomad Kim 2021. 3. 12. 04:18구현 사항
-
카카오, 구글 소셜 로그인 및 로그아웃
-
메인 페이지(로그인 화면) 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 |