From a9e14ff5e2d4cb5d89d60d94af28564dca73d6cd Mon Sep 17 00:00:00 2001 From: carry <2641257231@qq.com> Date: Sat, 15 Feb 2025 00:19:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E5=BF=AB=E9=80=9F?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E6=98=AF=E5=90=A6=E7=99=BB=E5=BD=95=E7=9A=84?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/store/userStore.ts | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/store/userStore.ts b/src/store/userStore.ts index f74fe0a..dca6cca 100644 --- a/src/store/userStore.ts +++ b/src/store/userStore.ts @@ -1,5 +1,5 @@ import { defineStore } from 'pinia'; -import { ref } from 'vue'; +import { ref, computed } from 'vue'; import { authService } from '../api/authService'; import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'; import { createPinia } from 'pinia'; @@ -10,18 +10,16 @@ const pinia = createPinia(); pinia.use(piniaPluginPersistedstate); // 定义 auth store,包含用户认证相关状态和方法 -export const useAuthStore = defineStore('auth', () => { - // 用户访问令牌 +export const userStore = defineStore('auth', () => { const accessToken = ref(''); - // 用户刷新令牌 const refreshToken = ref(''); - // 用户角色 const role = ref(''); - // 用户名 const username = ref(''); - // 用户 ID const userId = ref(null); + // 计算属性,用于快速判断用户是否登录 + const isLoggedIn = computed(() => !!accessToken.value); + // 设置访问和刷新令牌的方法 function setTokens(tokens: { access_token: string; refresh_token: string }) { accessToken.value = tokens.access_token; @@ -66,18 +64,18 @@ export const useAuthStore = defineStore('auth', () => { } } - return { accessToken, refreshTokenToken: refreshToken, role, username, userId, login, logout, refreshTokenMethod }; + return { accessToken, refreshTokenToken: refreshToken, role, username, userId, isLoggedIn, login, logout, refreshTokenMethod }; }, { persist: true, }); // 使用插件进行持久化,监听 store 变化并保存到本地存储 -useAuthStore().$subscribe((mutation, state) => { +userStore().$subscribe((mutation, state) => { localStorage.setItem('authStore', JSON.stringify(state)); }); // 监听 action 执行,登录和刷新令牌后保存状态到本地存储 -useAuthStore().$onAction(({ name, store, args, after, onError }) => { +userStore().$onAction(({ name, store, args, after, onError }) => { if (name === 'login' || name === 'refreshTokenMethod') { after(() => { localStorage.setItem('authStore', JSON.stringify(store.$state)); @@ -88,5 +86,5 @@ useAuthStore().$onAction(({ name, store, args, after, onError }) => { // 初始化时从本地存储恢复状态 const persistedState = JSON.parse(localStorage.getItem('authStore') || '{}'); if (persistedState.accessToken && persistedState.refreshTokenToken && persistedState.role && persistedState.username && persistedState.userId !== null) { - useAuthStore().$patch(persistedState); -} + userStore().$patch(persistedState); +} \ No newline at end of file