hookehuyr

refactor(auth): 移除本地token过期检查,改用服务器获取用户信息

移除本地的token过期检查逻辑,改为在组件挂载时从服务器获取用户信息并更新本地存储。这提高了用户状态的准确性和安全性,避免了本地存储可能带来的不一致问题。
/*
* @Date: 2025-03-20 21:11:31
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2025-03-26 16:11:58
* @LastEditTime: 2025-03-26 16:26:14
* @FilePath: /mlaj/src/contexts/auth.js
* @Description: 认证上下文管理模块,提供用户认证状态管理、登录登出功能
*/
// 导入Vue的组合式API相关函数
import { ref, provide, inject, onMounted } from 'vue'
import { logoutAPI } from '@/api/users'
import { logoutAPI, getUserInfoAPI } from '@/api/users'
// 创建认证上下文的Symbol key,用于provide/inject依赖注入
// 使用Symbol确保key的唯一性,避免命名冲突
......@@ -32,20 +32,20 @@ export function provideAuth() {
* 检查登录token是否过期
* @returns {boolean} true表示token有效,false表示token已过期
*/
const checkTokenExpiration = () => {
const loginTimestamp = localStorage.getItem('loginTimestamp')
if (loginTimestamp) {
const now = Date.now()
const diff = now - parseInt(loginTimestamp)
// 检查是否超过24小时(24 * 60 * 60 * 1000 毫秒)
if (diff > 24 * 60 * 60 * 1000) {
// token过期,清理登录状态并返回false
logout()
return false
}
}
return true
}
// const checkTokenExpiration = () => {
// const loginTimestamp = localStorage.getItem('loginTimestamp')
// if (loginTimestamp) {
// const now = Date.now()
// const diff = now - parseInt(loginTimestamp)
// // 检查是否超过24小时(24 * 60 * 60 * 1000 毫秒)
// if (diff > 24 * 60 * 60 * 1000) {
// // token过期,清理登录状态并返回false
// logout()
// return false
// }
// }
// return true
// }
/**
* 组件挂载时初始化用户状态
......@@ -53,12 +53,20 @@ export function provideAuth() {
* 2. 检查token是否过期
* 3. 恢复用户状态或保持登出状态
*/
onMounted(() => {
onMounted(async () => {
const savedUser = localStorage.getItem('currentUser')
if (savedUser) {
// 检查token是否有效,有效则恢复用户状态
if (checkTokenExpiration()) {
currentUser.value = JSON.parse(savedUser)
// // 检查token是否有效,有效则恢复用户状态
// if (checkTokenExpiration()) {
// currentUser.value = JSON.parse(savedUser)
// }
// 从服务器获取用户信息并更新本地存储
const { code, data } = await getUserInfoAPI();
if (code) {
currentUser.value = data.user
localStorage.setItem('currentUser', JSON.stringify(currentUser.value))
} else {
logout()
}
}
// 初始化完成,关闭加载状态
......