refactor: 移除登录信息在localStorage中的保存,改为仅使用cookies验证

- 移除 auth store 中所有 localStorage 相关代码(loadUserFromStorage、saveUserToStorage、clearUserFromStorage)
- 简化 setUserState 和 clearUserState,不再操作 localStorage
- 修改 initAuth 逻辑,只依赖 cookies 验证登录状态,不再从 localStorage 恢复
- 移除 HomePage.vue 和 Signup.vue 中注册成功后的 localStorage 保存
- 登录状态完全由后端 cookies 控制,提高安全性
This commit is contained in:
jingrow 2026-01-04 19:16:37 +08:00
parent eb70a0c6f6
commit 4b3ebaa7ed
3 changed files with 3 additions and 55 deletions

View File

@ -8,8 +8,6 @@ export interface User {
user_type: string user_type: string
} }
const STORAGE_KEY = 'auth_user'
export const useAuthStore = defineStore('auth', () => { export const useAuthStore = defineStore('auth', () => {
const user = ref<User | null>(null) const user = ref<User | null>(null)
const loading = ref(false) const loading = ref(false)
@ -25,49 +23,16 @@ export const useAuthStore = defineStore('auth', () => {
error?.message?.includes('Cookie已过期') error?.message?.includes('Cookie已过期')
} }
// 从 localStorage 加载用户信息 // 设置用户状态(只更新内存状态,不保存到 localStorage
const loadUserFromStorage = (): User | null => {
try {
const stored = localStorage.getItem(STORAGE_KEY)
if (stored) {
return JSON.parse(stored)
}
} catch (error) {
console.error('从 localStorage 加载用户信息失败:', error)
}
return null
}
// 保存用户信息到 localStorage
const saveUserToStorage = (userInfo: User) => {
try {
localStorage.setItem(STORAGE_KEY, JSON.stringify(userInfo))
} catch (error) {
console.error('保存用户信息到 localStorage 失败:', error)
}
}
// 清除 localStorage 中的用户信息
const clearUserFromStorage = () => {
try {
localStorage.removeItem(STORAGE_KEY)
} catch (error) {
console.error('清除 localStorage 用户信息失败:', error)
}
}
// 设置用户状态统一的状态更新方法保存到localStorage
const setUserState = (userInfo: User) => { const setUserState = (userInfo: User) => {
user.value = userInfo user.value = userInfo
isAuthenticated.value = true isAuthenticated.value = true
saveUserToStorage(userInfo)
} }
// 清除用户状态 // 清除用户状态
const clearUserState = () => { const clearUserState = () => {
user.value = null user.value = null
isAuthenticated.value = false isAuthenticated.value = false
clearUserFromStorage()
} }
// 验证并更新用户信息 // 验证并更新用户信息
@ -131,21 +96,8 @@ export const useAuthStore = defineStore('auth', () => {
} }
} }
// 如果cookie验证失败或没有cookie尝试从localStorage恢复 // 如果没有cookie或cookie验证失败清除认证状态
const storedUser = loadUserFromStorage() clearUserState()
if (storedUser) {
user.value = storedUser
isAuthenticated.value = true
// 尝试在后台验证用户信息,失败也不影响当前状态
validateAndUpdateUser().catch(() => {
// 静默失败保持localStorage中的状态
})
} else {
// 既没有cookie也没有localStorage清除认证状态
if (isAuthenticated.value) {
clearUserState()
}
}
} finally { } finally {
setInitializingAuth(false) setInitializingAuth(false)
} }

View File

@ -182,8 +182,6 @@ const handleSignupSubmit = async () => {
if (result.user) { if (result.user) {
authStore.user = result.user authStore.user = result.user
authStore.isAuthenticated = true authStore.isAuthenticated = true
localStorage.setItem('jingrow_user', JSON.stringify(result.user))
localStorage.setItem('jingrow_authenticated', 'true')
showSignupModal.value = false showSignupModal.value = false
signupFormData.username = '' signupFormData.username = ''
signupFormData.password = '' signupFormData.password = ''

View File

@ -230,8 +230,6 @@ const handleSignup = async () => {
if (result.user) { if (result.user) {
authStore.user = result.user authStore.user = result.user
authStore.isAuthenticated = true authStore.isAuthenticated = true
localStorage.setItem('jingrow_user', JSON.stringify(result.user))
localStorage.setItem('jingrow_authenticated', 'true')
router.push('/') router.push('/')
} else { } else {
const loginResult = await authStore.login(formData.username, formData.password) const loginResult = await authStore.login(formData.username, formData.password)