1. 로그인

로그인은 사용자의 username(또는 email)과 password를 백엔드로 전송해서

Access Token(여기서는 JWT를 사용)를 얻는다.

이렇게 얻은 Access Token을 관리하는 방법은 여러 가지가 있지만, 여기서는 usehooks-ts의

useLocalStorage를 사용해서 전역적으로 동기화한다.

  1. LoginFormStore를 이용해 로그인한다. 로그인에 성공하면 accessToken을 발급받는다. 로컬 스토리지에 set하는 것 까지 이뤄진다.

  2. useAccessToken 으로 accessToken을 ApiService 내부에 저장하고 매 요청마다 첨부한다.

LoginFormStore.ts

import { singleton } from "tsyringe";
import { Action, Store } from "usestore-ts";
import { apiService } from "../services/ApiService";

@singleton()
@Store()
export default class LoginFormStore {
  email = "";

  password = "";

  error = false;

  accessToken = "";

  get valid() {
    return this.email.includes("@") && !!this.password;
  }

  @Action()
  changeEmail(email: string) {
    this.email = email;
  }

  @Action()
  changePassword(password: string) {
    this.password = password;
  }

  @Action()
  private setAccessToken(accessToken: string) {
    this.accessToken = accessToken;
  }

  @Action()
  private setError() {
    this.error = true;
  }

  @Action()
  reset() {
    this.email = "";
    this.password = "";
    this.error = false;
    this.accessToken = "";
  }

  async login() {
    try {
      const accessToken = await apiService.login({
        email: this.email,
        password: this.password,
      });
      this.setAccessToken(accessToken);
    } catch (e) {
      this.setError();
    }
  }
}

useAccessToken

routes.test.tsx 에서 로그인 test

useAccessToken 훅을 이용해 손쉽게 로그인 여부를 알 수 있다.

Last updated