리액트 카카오 로그인

국물빌런·2020년 8월 21일
1

카카오 홈페이지에서 앱 등록, 플랫폼 등록, web인경우 도메인 등록

카카오 로그인 모듈 설치

npm i —save react-kakao-login

스타일 컴포넌트 설치 - 나중에 자세히 알아보자

npm i —save styled-components

로그인 컴포넌트 만들고

카카오톡 로그인버튼 렌더링

성공,실패 함수 구현

성공하면 access token을 리턴받음.

이 access token은 클라이언트에 저장하는 정보가 아니다.

일단 필요한건 식별자 뿐이니 json-server에 저장하고 페이지는 넘겨보자

npm i —save -g json-server

임시 디비로쓸 디렉토리를 만듬

mkdir fake-server

디비 파일을 만들자, 아래 포멧처럼 만들면됨

{
  "users": [
    {
      "id": 1,
      "user_id": "jebi10mari@naver.com"
    },
    {
      "user_id": "pocketmarket.official@gmail.com",
      "id": 2
    }
  ]
}

일단 현재 파악된건 기본적인 rest api가 자동으로 제공이 된다는 것이다.

쿼리 스트링으로 필터도 가능하고 post로 insert도 가능하다.

그리고 id는 자동으로 시퀀스되어 post시 넣을 필요도 없고 엔드포인트로서도 사용 가능하다.

json-server실행

json-server --watch users.json --port 3001

이제 리액트에서 axios설치하고 테스트한번 해보자

비동기 함수때문에 애좀 먹었다. 어쨋든 로그인 유저가 없으면 추가하는 로직을 추가하였다.

이제 리액트 라우터에 대해 자세히 알아보자

import React, {useState} from 'react';
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faComments } from '@fortawesome/free-solid-svg-icons';
import fontawesome from '@fortawesome/fontawesome';
import KaKaoLogin from 'react-kakao-login';
import styled from 'styled-components';

fontawesome.library.add(faComments);

function Login() {
    const [data, setData] = useState('');

    const responseKaKao = (res) => {
        setData(res);
        console.log(JSON.stringify(res));
    };

    const responseFail = (err) => {
        alert(err);
    }

    return (
        <div className="login">
            <div className="login__box">
                {/*<div className="kakao__login"><FontAwesomeIcon icon="comments" className="login__icon" />카카오 로그인</div>*/}
                <KaKaoBtn
                    //styled component 통해 style을 입혀 줄 예정
                    jsKey={'????'}
                    //카카오에서 할당받은 jsKey를 입력
                    buttonText='카카오 계정으로 로그인'
                    //로그인 버튼의 text를 입력
                    onSuccess={responseKaKao}
                    onFailure={responseFail}
                    //성공했을때 불러올 함수로서 fetch해서 localStorage에 저장할 함수를 여기로 저장
                    getProfile={true}
                />
                <div className="kakao__signup"><FontAwesomeIcon icon="comments" className="login__icon" />카카오 회원가입</div>
            </div>
        </div>
        );
}

const KaKaoBtn = styled(KaKaoLogin)`
  padding: 0;
  width: 300px;
  height: 45px;
  line-height: 44px;
  color: #783c00;
  background-color: #ffeb00;
  border: 1px solid transparent;
  border-radius: 3px;
  font-size: 14px;
  font-weight: bold;
  text-align: center;
  cursor: pointer;
  &:hover {
    box-shadow: 0 0px 15px 0 rgba(0, 0, 0, 0.2);
  }
`;

export default Login;
profile
국물을 달라

1개의 댓글

comment-user-thumbnail
2020년 8월 22일

응원왔습니다~ 이번 프로젝트때 소셜로그인을 구현하는데 어려움이 있었는데 역시 어렵군요~ 좋은 글 읽고 다음 프젝때 다시 시도해보겠습니다ㅎㅎ 화이팅하세요~😊 👍

답글 달기