auth.helper.ts 1.66 KB
Newer Older
Yoon, Daeki's avatar
Yoon, Daeki committed
1
import { authApi } from "../apis";
2
import { IUser } from "../types";
Yoon, Daeki's avatar
Yoon, Daeki committed
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

const LOCAL_USER_INFO = "survey-user-info";

/**
 * 1. 백엔드 로그인을 호출하여 로그인 정보를 얻습니다.
 * 2. 로컬 저장소에 저장합니다.
 * 3. 사용자 정보를 반환합니다.
 * @param email 이메일
 * @param password 비밀번호
 * @returns 사용자 정보
 */
export const handleLogin = async (email: string, password: string) => {
  const user: IUser = await authApi.login(email, password);
  // 로컬 저장소에는 로그인 여부만 저장
  localStorage.setItem(
    LOCAL_USER_INFO,
    JSON.stringify({
      isLoggedIn: user.isLoggedIn,
21
      role: user.role,
Yoon, Daeki's avatar
Yoon, Daeki committed
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
    })
  );
  return user;
};

/**
 * 로컬 저장소의 정보를 삭제합니다.
 * 백엔드 로그아웃을 호출하여 쿠키를 제거합니다.
 */
export const handleLogout = async () => {
  console.log("handle logout called");
  localStorage.removeItem(LOCAL_USER_INFO);
  try {
    await authApi.logout();
  } catch (error) {
    console.log("logout 중에 에러 발생:", error);
  }
};

/**
 * 1. 로컬 저장소에 저장된 사용자 로그인 정보를 반환합니다.
 * 2. 로컬 저장소에 정보가 없으면 { isLoggedIn: false }를 반환합니다.
 * @returns 로컬 저장소에 저장된 사용자 정보
 */
export const getLocalUser = () => {
  console.log("get local user called");
  const userInfo = localStorage.getItem(LOCAL_USER_INFO);
  const user: IUser = { isLoggedIn: false };
  if (!userInfo) {
    return user;
  }

  const userData = JSON.parse(userInfo);
  if (userData.isLoggedIn) {
    user.isLoggedIn = true;
  } else {
    user.isLoggedIn = false;
  }
  return user;
};