fix: 修复登录后立即验证token失败的问题

- 修改Dashboard组件,对于已登录用户跳过重复的token验证
- 在LoginForm中添加详细的认证状态日志
- 优化initAuth方法,避免对已登录用户的重复验证
- 添加认证状态检查,确保登录成功后再跳转
- 解决登录成功后立即调用/auth/me导致401的时序问题

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-09-06 10:02:47 +08:00
parent 19a8426163
commit 21f4ff65d9
3 changed files with 40 additions and 6 deletions

View File

@@ -99,11 +99,18 @@ const handleLogin = async () => {
} }
try { try {
await authStore.login({ const response = await authStore.login({
username: loginForm.username, username: loginForm.username,
password: loginForm.password password: loginForm.password
}) })
console.log('登录成功,响应数据:', response)
console.log('Auth store状态:', {
isLoggedIn: authStore.isLoggedIn,
hasToken: !!authStore.token,
hasUser: !!authStore.user
})
// 如果选择记住我,保存登录信息到本地存储 // 如果选择记住我,保存登录信息到本地存储
if (loginForm.rememberMe) { if (loginForm.rememberMe) {
localStorage.setItem('rememberedUser', JSON.stringify({ localStorage.setItem('rememberedUser', JSON.stringify({
@@ -114,7 +121,14 @@ const handleLogin = async () => {
localStorage.removeItem('rememberedUser') localStorage.removeItem('rememberedUser')
} }
router.push('/dashboard') // 确保状态已正确设置后再跳转
if (authStore.isLoggedIn) {
console.log('认证状态确认成功即将跳转到Dashboard')
router.push('/dashboard')
} else {
console.error('登录后认证状态异常')
toast.error('登录状态异常,请重试')
}
} catch (error: any) { } catch (error: any) {
console.error('登录失败,详细错误信息:', { console.error('登录失败,详细错误信息:', {
status: error.response?.status, status: error.response?.status,

View File

@@ -16,10 +16,17 @@ export const useAuthStore = defineStore('auth', () => {
// 初始化认证状态 // 初始化认证状态
const initAuth = async () => { const initAuth = async () => {
// 如果已经登录,不需要重新初始化
if (isLoggedIn.value) {
console.log('用户已登录,跳过初始化')
return
}
const storedToken = userAuth.getToken() const storedToken = userAuth.getToken()
const storedUser = userAuth.getUserInfo() const storedUser = userAuth.getUserInfo()
if (storedToken && storedUser) { if (storedToken && storedUser) {
console.log('从本地存储恢复登录状态')
token.value = storedToken token.value = storedToken
user.value = storedUser user.value = storedUser
try { try {

View File

@@ -201,8 +201,22 @@ const loadUserAccounts = async () => {
// 组件挂载时获取数据 // 组件挂载时获取数据
onMounted(async () => { onMounted(async () => {
try { try {
// 初始化认证状态 console.log('Dashboard初始化开始当前认证状态:', {
await authStore.initAuth() isLoggedIn: authStore.isLoggedIn,
hasToken: !!authStore.token,
hasUser: !!authStore.user,
hasLocalToken: !!localStorage.getItem('userToken'),
hasLocalUser: !!localStorage.getItem('userInfo')
})
// 如果用户已经登录(比如刚从登录页面跳转过来),直接使用当前状态
if (authStore.isLoggedIn) {
console.log('用户已登录,直接加载账号数据')
} else {
// 否则尝试从localStorage恢复状态
console.log('用户未登录,尝试初始化认证状态')
await authStore.initAuth()
}
// 确保用户已登录 // 确保用户已登录
if (!authStore.isLoggedIn) { if (!authStore.isLoggedIn) {
@@ -211,8 +225,7 @@ onMounted(async () => {
return return
} }
// initAuth() 已经验证过token无需再次调用getProfile() // 加载用户账号
// 直接加载用户账号
await loadUserAccounts() await loadUserAccounts()
} catch (error: any) { } catch (error: any) {
console.error('Dashboard初始化失败:', error) console.error('Dashboard初始化失败:', error)