refactor(auth): 移除本地token过期检查,改用服务器获取用户信息
移除本地的token过期检查逻辑,改为在组件挂载时从服务器获取用户信息并更新本地存储。这提高了用户状态的准确性和安全性,避免了本地存储可能带来的不一致问题。
Showing
1 changed file
with
28 additions
and
20 deletions
| 1 | /* | 1 | /* |
| 2 | * @Date: 2025-03-20 21:11:31 | 2 | * @Date: 2025-03-20 21:11:31 |
| 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com | 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com |
| 4 | - * @LastEditTime: 2025-03-26 16:11:58 | 4 | + * @LastEditTime: 2025-03-26 16:26:14 |
| 5 | * @FilePath: /mlaj/src/contexts/auth.js | 5 | * @FilePath: /mlaj/src/contexts/auth.js |
| 6 | * @Description: 认证上下文管理模块,提供用户认证状态管理、登录登出功能 | 6 | * @Description: 认证上下文管理模块,提供用户认证状态管理、登录登出功能 |
| 7 | */ | 7 | */ |
| 8 | 8 | ||
| 9 | // 导入Vue的组合式API相关函数 | 9 | // 导入Vue的组合式API相关函数 |
| 10 | import { ref, provide, inject, onMounted } from 'vue' | 10 | import { ref, provide, inject, onMounted } from 'vue' |
| 11 | -import { logoutAPI } from '@/api/users' | 11 | +import { logoutAPI, getUserInfoAPI } from '@/api/users' |
| 12 | 12 | ||
| 13 | // 创建认证上下文的Symbol key,用于provide/inject依赖注入 | 13 | // 创建认证上下文的Symbol key,用于provide/inject依赖注入 |
| 14 | // 使用Symbol确保key的唯一性,避免命名冲突 | 14 | // 使用Symbol确保key的唯一性,避免命名冲突 |
| ... | @@ -32,20 +32,20 @@ export function provideAuth() { | ... | @@ -32,20 +32,20 @@ export function provideAuth() { |
| 32 | * 检查登录token是否过期 | 32 | * 检查登录token是否过期 |
| 33 | * @returns {boolean} true表示token有效,false表示token已过期 | 33 | * @returns {boolean} true表示token有效,false表示token已过期 |
| 34 | */ | 34 | */ |
| 35 | - const checkTokenExpiration = () => { | 35 | + // const checkTokenExpiration = () => { |
| 36 | - const loginTimestamp = localStorage.getItem('loginTimestamp') | 36 | + // const loginTimestamp = localStorage.getItem('loginTimestamp') |
| 37 | - if (loginTimestamp) { | 37 | + // if (loginTimestamp) { |
| 38 | - const now = Date.now() | 38 | + // const now = Date.now() |
| 39 | - const diff = now - parseInt(loginTimestamp) | 39 | + // const diff = now - parseInt(loginTimestamp) |
| 40 | - // 检查是否超过24小时(24 * 60 * 60 * 1000 毫秒) | 40 | + // // 检查是否超过24小时(24 * 60 * 60 * 1000 毫秒) |
| 41 | - if (diff > 24 * 60 * 60 * 1000) { | 41 | + // if (diff > 24 * 60 * 60 * 1000) { |
| 42 | - // token过期,清理登录状态并返回false | 42 | + // // token过期,清理登录状态并返回false |
| 43 | - logout() | 43 | + // logout() |
| 44 | - return false | 44 | + // return false |
| 45 | - } | 45 | + // } |
| 46 | - } | 46 | + // } |
| 47 | - return true | 47 | + // return true |
| 48 | - } | 48 | + // } |
| 49 | 49 | ||
| 50 | /** | 50 | /** |
| 51 | * 组件挂载时初始化用户状态 | 51 | * 组件挂载时初始化用户状态 |
| ... | @@ -53,12 +53,20 @@ export function provideAuth() { | ... | @@ -53,12 +53,20 @@ export function provideAuth() { |
| 53 | * 2. 检查token是否过期 | 53 | * 2. 检查token是否过期 |
| 54 | * 3. 恢复用户状态或保持登出状态 | 54 | * 3. 恢复用户状态或保持登出状态 |
| 55 | */ | 55 | */ |
| 56 | - onMounted(() => { | 56 | + onMounted(async () => { |
| 57 | const savedUser = localStorage.getItem('currentUser') | 57 | const savedUser = localStorage.getItem('currentUser') |
| 58 | if (savedUser) { | 58 | if (savedUser) { |
| 59 | - // 检查token是否有效,有效则恢复用户状态 | 59 | + // // 检查token是否有效,有效则恢复用户状态 |
| 60 | - if (checkTokenExpiration()) { | 60 | + // if (checkTokenExpiration()) { |
| 61 | - currentUser.value = JSON.parse(savedUser) | 61 | + // currentUser.value = JSON.parse(savedUser) |
| 62 | + // } | ||
| 63 | + // 从服务器获取用户信息并更新本地存储 | ||
| 64 | + const { code, data } = await getUserInfoAPI(); | ||
| 65 | + if (code) { | ||
| 66 | + currentUser.value = data.user | ||
| 67 | + localStorage.setItem('currentUser', JSON.stringify(currentUser.value)) | ||
| 68 | + } else { | ||
| 69 | + logout() | ||
| 62 | } | 70 | } |
| 63 | } | 71 | } |
| 64 | // 初始化完成,关闭加载状态 | 72 | // 初始化完成,关闭加载状态 | ... | ... |
-
Please register or login to post a comment