
lang-type은 영어버전으로 일단 진행한다.

react-toastify 사용

hook을 이용해 input 값을 관리하는 state를 정의하고 graphql로 서버로 api 호출하여 로그인 또는 회원가입이 되도록 진행한다.
passwordless login
// 📄 AuthQueries.js
export const LOCAL_LOG_IN = gql`
  mutation logUserIn($token: String!) {
    logUserIn(token: $token) @client
  }
`;
...
// 📄 Apollo/LocalState.js
Mutation: {
  logUserIn: (_, { token }, { cache }) => {
    localStorage.setItem("token", token);
    cache.writeData({
      data: {
        isLoggedIn: true,
      },
    });
    return null;
  },
  logUserOut: (_, __, { cache }) => {
    localStorage.removeItem("token");
    window.location.reload();
    return null;
  },
},
useMutation
react-apollo-hooks에 useMutation을 이용하여 mutation resolver를 호출할 수 있다.
import { useMutation } from 'apollo-react-hooks';
import gql from 'apollo-boost';
const LOG_IN = gql`
  mutation requestSecret($email: String!) {
    requestSecret(email: $email)
  }
`;
function login() {
  let input;
  const email = useInput("");
  const [requestSecretMutation] = useMutation(LOG_IN, {variables: {email: email.value}});
  return (
    <div>
      <form onSubmit={
    	async e => {
          e.preventDefault();
          if(email !== ""){
            const {data: {requestSecret}} = await requestSecretMutation();
            if(!requestSecret){
              toast.error("You don't have an account yet, create one");
            } else {
              toast.success("Check your email for your login secret");
            }
          }
        }}
      >
        <input type="email"/>
        <button type="submit">Log In</button>
      </form>
    </div>
  );
}