import { defineStore } from 'pinia'; import type { User, LoginResponse } from '~/types/User'; // import redis from '~/utils/redis'; import { CookieManager } from '~/utils/cookieManager' import { $fetch } from 'ofetch' // 认证状态接口 export interface AuthState { // user: User | null, token: string | null, isAuthenticated: boolean, loading: boolean } export const useAuthStore = defineStore('auth', { state: (): AuthState => ({ // user: null, token: null, isAuthenticated: false, loading: false, }), getters: { isLoggedIn: (state) => state.isAuthenticated, // currentUser: (state) => state.user, // userRoles: (state) => state.user?.Roles || [], // hasRole: (state) => (role: string) => { // return state.user?.Roles?.includes(role) || false // }, // hasPermission: (state) => (permission: string) => { // return state.user?.permissions?.includes(permission) || false // }, }, actions: { // 初始化认证状态 initializeAuth() { // 客户端:从Cookie恢复状态 if (CookieManager.isClient) { this.restoreFromCookies() } // 服务端:需要通过插件或中间件处理 }, // 从Cookie恢复状态 restoreFromCookies() { try { this.token = AuthService.getAuthToken(); // const user = AuthService.getUserInfo() if (this.token) { // this.user = user this.isAuthenticated = AuthService.isAuthenticated() } // this.token = AuthService.getAuthToken(); } catch (error) { console.error('Failed to restore auth from cookies:', error) this.clearAuth() } }, // 登录 async login(credentials: { UserName: string; PassWord: string }): Promise { this.loading = true try { // 使用封装的API客户端 const response = await $fetch('/api/auth/login', { method: 'POST', body: credentials }); if (response.Code == 1) { // this.user = response.Data.user; this.isAuthenticated = true; this.token = response.Data.token; } return response; } catch (error) { this.clearAuth() return { Code: -1, Msg: error as string || '登录失败', Data: null } } finally { this.loading = false } }, // 登出 async logout() { try { await $fetch('/api/auth/logout'); } catch (error) { console.error('Logout API error:', error) } finally { // 清除本地状态 this.clearAuth() // 客户端重定向 if (CookieManager.isClient) { window.location.href = '/login' } } }, // // 更新用户信息 // updateUser(user: Partial) { // if (this.user) { // this.user = { ...this.user, ...user } // // 更新Cookie中的用户信息 // AuthService.saveUserInfo(this.user) // } // }, // 检查认证状态 async checkAuth() { try { const isAuthenticated = await AuthService.checkAuth() if (isAuthenticated) { // const user = AuthService.getUserInfo() // if (user) { // this.user = user // this.isAuthenticated = true // } const token = AuthService.getAuthToken(); if (token) { this.isAuthenticated = true; } } else { this.clearAuth() } return isAuthenticated } catch (error) { this.clearAuth() return false } }, // 清除认证状态 clearAuth() { // this.user = null this.token = null; this.isAuthenticated = false AuthService.clearAuthData() }, }, })