Files
bio_frontend/stores/user.ts

109 lines
2.4 KiB
TypeScript
Raw Normal View History

2025-08-08 13:11:33 +09:00
export const useUserStore = defineStore("user", () => {
// 상태
const isLoggedIn = ref(false);
const user = ref<{
id?: string;
userId?: string;
email?: string;
name?: string;
role?: string;
} | null>(null);
const token = ref<string | null>(null);
2025-08-22 14:01:30 +09:00
interface LoginData {
userId: string
role: string
lastLoginAt: string
}
2025-08-08 13:11:33 +09:00
// 게터
const isAdmin = computed(() => user.value?.role === "admin");
const userName = computed(() => user.value?.name || "사용자");
// 액션
const login = async (userId: string, password: string) => {
try {
// 실제 API 호출로 대체할 수 있습니다
2025-08-22 14:01:30 +09:00
2025-08-27 13:06:13 +09:00
const {data, error: _error } = await useApi<ApiResponse<LoginData>>('/login', {
2025-08-08 13:11:33 +09:00
method: 'post',
2025-08-22 14:01:30 +09:00
body: { userId, password }
})
2025-08-27 17:06:25 +09:00
2025-08-22 14:01:30 +09:00
let mockUser;
2025-08-08 13:11:33 +09:00
2025-08-27 13:06:13 +09:00
if(data && data.value && data.value.success){
2025-08-22 14:01:30 +09:00
mockUser = data.value.data;
}else{
throw new Error("아이디 또는 비밀번호가 올바르지 않습니다.");
2025-08-08 13:11:33 +09:00
}
2025-08-22 14:01:30 +09:00
user.value = mockUser;
2025-08-27 17:06:25 +09:00
// token.value = "mock-token-" + Date.now();
2025-08-22 14:01:30 +09:00
isLoggedIn.value = true;
return { success: true, user: mockUser };
2025-08-08 13:11:33 +09:00
} catch (error) {
console.error("로그인 실패:", error);
return {
success: false,
error:
error instanceof Error ? error.message : "로그인에 실패했습니다.",
};
}
};
const logout = () => {
user.value = null;
token.value = null;
isLoggedIn.value = false;
// 로컬 스토리지에서 제거
localStorage.removeItem("user");
localStorage.removeItem("token");
};
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;
}
};
2025-08-27 17:06:25 +09:00
const setToken = (accessToken : string) => {
token.value = accessToken;
}
const getToken = () => {
return token;
}
2025-08-08 13:11:33 +09:00
// 초기 인증 상태 확인
if (import.meta.client) {
checkAuth();
}
return {
// 상태
isLoggedIn,
user,
token,
// 게터
isAdmin,
userName,
// 액션
login,
logout,
checkAuth,
2025-08-27 17:06:25 +09:00
setToken,
getToken
2025-08-08 13:11:33 +09:00
};
});