|
|
|
|
|
import { defineStore } from 'pinia';
|
|
|
|
|
|
import { login } from '~/services/authService';
|
|
|
|
|
|
import { useCookie } from '#app';
|
|
|
|
|
|
import { getCookie, removeCookie, setCookie } from '@/utils/cookie'
|
|
|
|
|
|
// import redis from '~/utils/redis';
|
|
|
|
|
|
|
|
|
|
|
|
export const useAuthStore = defineStore('auth', {
|
|
|
|
|
|
state: () => ({
|
|
|
|
|
|
token: null as string | null,
|
|
|
|
|
|
user: null as any | null,
|
|
|
|
|
|
refreshToken: null as string | null,
|
|
|
|
|
|
isAuthenticated: false,
|
|
|
|
|
|
isInitialized: false
|
|
|
|
|
|
}),
|
|
|
|
|
|
actions: {
|
|
|
|
|
|
// 初始化认证状态
|
|
|
|
|
|
async initializeAuth() {
|
|
|
|
|
|
// if (import.meta.client) {
|
|
|
|
|
|
// this.token = localStorage.getItem("token");
|
|
|
|
|
|
// this.user = localStorage.getItem("userInfo");
|
|
|
|
|
|
// console.log("meta.client", this.token, this.user);
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
const tokenCookie = getCookie('token');
|
|
|
|
|
|
// const refreshTokenCookie = getCookie('refreshToken');
|
|
|
|
|
|
// const userCookie = getCookie('userInfo');
|
|
|
|
|
|
console.log("初始化认证状态 获取到的用户信息:", tokenCookie);
|
|
|
|
|
|
if (tokenCookie) {
|
|
|
|
|
|
this.token = tokenCookie;
|
|
|
|
|
|
// this.refreshToken = refreshTokenCookie;
|
|
|
|
|
|
// this.user = JSON.parse(userCookie);
|
|
|
|
|
|
this.isAuthenticated = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
this.isInitialized = true;
|
|
|
|
|
|
return true;
|
|
|
|
|
|
},
|
|
|
|
|
|
// 验证权限
|
|
|
|
|
|
async checkAuth() {
|
|
|
|
|
|
// const nuxtApp = useNuxtApp();
|
|
|
|
|
|
// this.token = nuxtApp.$state.auth?.token;
|
|
|
|
|
|
},
|
|
|
|
|
|
// 登录操作
|
|
|
|
|
|
async login(credentials: { UserName: string, PassWord: string }) {
|
|
|
|
|
|
try {
|
|
|
|
|
|
this.clearUserInfo();
|
|
|
|
|
|
const response = await login(credentials);
|
|
|
|
|
|
// 生成唯一会话 ID(推荐使用 uuid 或更安全的随机字符串)
|
|
|
|
|
|
const sessionId = crypto.randomUUID();
|
|
|
|
|
|
// 更新状态
|
|
|
|
|
|
this.token = response.Data.token;
|
|
|
|
|
|
this.refreshToken = response.Data.token;
|
|
|
|
|
|
this.user = response.Data.user;
|
|
|
|
|
|
this.isAuthenticated = true;
|
|
|
|
|
|
|
|
|
|
|
|
// 设置cookie
|
|
|
|
|
|
setCookie('token', response.Data.token);
|
|
|
|
|
|
// setCookie('refreshToken', response.Data.token); // 7天
|
|
|
|
|
|
// setCookie('userInfo', JSON.stringify(response.Data.user));
|
|
|
|
|
|
// 存储会话到 Redis(设置过期时间,如 1 小时)
|
|
|
|
|
|
// await redis.set(`session:${sessionId}`, JSON.stringify(response.Data.user), 'EX', 3600);
|
|
|
|
|
|
return response;
|
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
this.logout();
|
|
|
|
|
|
throw error;
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
setToken(token: string) {
|
|
|
|
|
|
this.token = token;
|
|
|
|
|
|
},
|
|
|
|
|
|
setUser(user: any) {
|
|
|
|
|
|
this.user = user
|
|
|
|
|
|
},
|
|
|
|
|
|
// 刷新令牌
|
|
|
|
|
|
// async refreshToken() {
|
|
|
|
|
|
// if (!this.refreshToken) {
|
|
|
|
|
|
// throw new Error('No refresh token available');
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// try {
|
|
|
|
|
|
// const response = await refreshToken(this.refreshToken);
|
|
|
|
|
|
|
|
|
|
|
|
// // 更新状态
|
|
|
|
|
|
// this.token = response.token;
|
|
|
|
|
|
|
|
|
|
|
|
// // 更新cookie
|
|
|
|
|
|
// const tokenCookie = useCookie('token', { maxAge: 60 * 60 * 24 });
|
|
|
|
|
|
// tokenCookie.value = response.token;
|
|
|
|
|
|
|
|
|
|
|
|
// return response.token;
|
|
|
|
|
|
// } catch (error) {
|
|
|
|
|
|
// this.logout();
|
|
|
|
|
|
// throw error;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
|
|
|
|
logout() {
|
|
|
|
|
|
try {
|
|
|
|
|
|
if (this.token) {
|
|
|
|
|
|
// TODO 需要在 authService 中实现退出登录 api
|
|
|
|
|
|
// await logout();
|
|
|
|
|
|
}
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
this.token = null;
|
|
|
|
|
|
this.refreshToken = null;
|
|
|
|
|
|
this.user = null;
|
|
|
|
|
|
this.isAuthenticated = false;
|
|
|
|
|
|
this.isInitialized = true;
|
|
|
|
|
|
|
|
|
|
|
|
// 清除cookie
|
|
|
|
|
|
removeCookie('token');
|
|
|
|
|
|
// removeCookie('refreshToken');
|
|
|
|
|
|
// removeCookie('userInfo');
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
clearUserInfo() {
|
|
|
|
|
|
this.token = null;
|
|
|
|
|
|
this.refreshToken = null;
|
|
|
|
|
|
this.user = null;
|
|
|
|
|
|
// 清除cookie
|
|
|
|
|
|
removeCookie('token');
|
|
|
|
|
|
// removeCookie('refreshToken');
|
|
|
|
|
|
// removeCookie('userInfo');
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|