Files
bio_frontend/stores/user.ts

91 lines
1.8 KiB
TypeScript

export const useUserStore = defineStore(
"user",
() => {
// 상태
const isLoggedIn = ref(false);
const user = ref<{
userId?: string;
name?: string;
} | null>(null);
const token = ref<string | null>(null);
// 추후 제거 필요
const isAdmin = true;
interface LoginData {
userId: string;
name: string;
}
const login = async (userId: string, password: string) => {
const { success, data, description } = await useApi<
ApiResponse<LoginData>
>("/login", {
method: "post",
body: { userId, password },
});
if (success) {
user.value = data;
isLoggedIn.value = true;
return { success, data };
} else {
return {
success: false,
error: description,
};
}
};
const logout = () => {
user.value = null;
isLoggedIn.value = false;
useApi("/members/logout", { method: "post" });
};
const checkAuth = () => {
// 페이지 로드 시 로컬 스토리지에서 사용자 정보 복원
const savedUser = localStorage.getItem("user");
const savedToken = localStorage.getItem("token");
if (savedUser && savedToken) {
user.value = JSON.parse(savedUser);
token.value = savedToken;
isLoggedIn.value = true;
}
};
const setToken = (accessToken: string) => {
token.value = accessToken;
};
const getToken = () => {
return token;
};
// 초기 인증 상태 확인
if (import.meta.client) {
checkAuth();
}
return {
// 상태
isLoggedIn,
user,
token,
// 게터
isAdmin,
// 액션
login,
logout,
checkAuth,
setToken,
getToken,
};
},
{
persist: true,
}
);