ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 리액트로 블로그 만들기 #10
    2018~2019/React.js 2018. 12. 21. 16:35

    React로 블로그 만들기 #10

     - 로그인 구현(7) 프론트엔드 연동 -


    1. ApolloClient

    - 앞서 만든 백엔드(GraphqQL, MongoDB)와 프론트엔드(React)를 연동하기 위해 ApolloClient를 사용함.

    - 간단하게 백엔드 uri만 적으면 클라이언트를 자동으로 생성해준다.

    - 패키지 설치 : yarn add react-apollo apollo-boost

    - 참조 : http://www.apollographql.com/docs/react/


    1) src/apollo.js

    - apolloclient를 생성한 뒤, now를 통해 배포된 백엔드 주소를 입력해줌.


    import ApolloClient from 'apollo-boost';

    const client = new ApolloClient({
    uri: "https://blogql-pfuypccxcr.now.sh"
    });
    export default client


    2) src/queries.js

    - graphql 문법을 사용하기 위해 패키지 설치 : yarn add graphql-tag

    - 백엔드에서 만들었던 login mutation 그대로 프론트엔드에서 사용할 mutation을 만들어준다.

    - login에 성공했을 시, 반환 받는 변수는 id, name, provider이다.


    import gql from 'graphql-tag';

    // Sign up
    export const login = gql`
    mutation login($id: String!, $name: String!, $provider: String!){
    login(id: $id, name: $name, provider: $provider) {
    id,
    name,
    provider,
    }
    }
    `;


    3) src/Component/Login.js

    - 위에서 만들었던 Login Mutation을 Login Component와 compose한다. => 패키지 설치 compose, withRouter

    - 그리고 doSignUp 함수를 실행할 때, Login Mutation을 실행하도록 로직 수정한다.

    - state에 저장했던 id, name, provider를 가져와 Graphql을 통해 백엔드로 보내준다.

    - 그리고 반환값이 있는 경우, 세션에 정보를 저장한다.


    import React, { Component } from 'react';
    import { GoogleLogin } from 'react-google-login';
    import KakaoLogin from 'react-kakao-login';
    import styled from 'styled-components';
    import { graphql, compose } from 'react-apollo';
    import { login } from '../queries';
    import { withRouter } from "react-router-dom";

    class Login extends Component {

    ...

    // Login Mutation
    doSignUp = async () => {
    const { id, name, provider } = this.state;
    const user = await this.props.LoginMutation({
    variables: {
    id: String(id),
    name,
    provider
    }
    });

    if(user.data.login) {
    window.sessionStorage.setItem('id', id);
    window.sessionStorage.setItem('name', user.data.login.name);
    window.sessionStorage.setItem('provider', provider);
    this.props.onLogin();
    this.props.history.push('/');
    }
    else
    alert("로그인에 실패하셨습니다.");
    }

    ...

    export default compose(
    graphql(login, { name: 'LoginMutation'})
    )(withRouter(Login));


    4) 실행 결과

    - 로컬스토리지에 저장된 이름을 사용하여 OO님 반갑습니다.라고 출력해준다.




    '2018~2019 > React.js' 카테고리의 다른 글

    now2.0  (0) 2018.12.21
    React로 블로그 만들기 #9  (2) 2018.11.05
    React로 블로그 만들기 #8  (2) 2018.11.04
    React로 블로그 만들기 #7  (0) 2018.11.01
    React로 블로그 만들기 #6  (5) 2018.10.30
Designed by Tistory.