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:
@@ -99,11 +99,18 @@ const handleLogin = async () => {
|
||||
}
|
||||
|
||||
try {
|
||||
await authStore.login({
|
||||
const response = await authStore.login({
|
||||
username: loginForm.username,
|
||||
password: loginForm.password
|
||||
})
|
||||
|
||||
console.log('登录成功,响应数据:', response)
|
||||
console.log('Auth store状态:', {
|
||||
isLoggedIn: authStore.isLoggedIn,
|
||||
hasToken: !!authStore.token,
|
||||
hasUser: !!authStore.user
|
||||
})
|
||||
|
||||
// 如果选择记住我,保存登录信息到本地存储
|
||||
if (loginForm.rememberMe) {
|
||||
localStorage.setItem('rememberedUser', JSON.stringify({
|
||||
@@ -114,7 +121,14 @@ const handleLogin = async () => {
|
||||
localStorage.removeItem('rememberedUser')
|
||||
}
|
||||
|
||||
router.push('/dashboard')
|
||||
// 确保状态已正确设置后再跳转
|
||||
if (authStore.isLoggedIn) {
|
||||
console.log('认证状态确认成功,即将跳转到Dashboard')
|
||||
router.push('/dashboard')
|
||||
} else {
|
||||
console.error('登录后认证状态异常')
|
||||
toast.error('登录状态异常,请重试')
|
||||
}
|
||||
} catch (error: any) {
|
||||
console.error('登录失败,详细错误信息:', {
|
||||
status: error.response?.status,
|
||||
|
||||
@@ -16,10 +16,17 @@ export const useAuthStore = defineStore('auth', () => {
|
||||
|
||||
// 初始化认证状态
|
||||
const initAuth = async () => {
|
||||
// 如果已经登录,不需要重新初始化
|
||||
if (isLoggedIn.value) {
|
||||
console.log('用户已登录,跳过初始化')
|
||||
return
|
||||
}
|
||||
|
||||
const storedToken = userAuth.getToken()
|
||||
const storedUser = userAuth.getUserInfo()
|
||||
|
||||
if (storedToken && storedUser) {
|
||||
console.log('从本地存储恢复登录状态')
|
||||
token.value = storedToken
|
||||
user.value = storedUser
|
||||
try {
|
||||
|
||||
@@ -201,8 +201,22 @@ const loadUserAccounts = async () => {
|
||||
// 组件挂载时获取数据
|
||||
onMounted(async () => {
|
||||
try {
|
||||
// 初始化认证状态
|
||||
await authStore.initAuth()
|
||||
console.log('Dashboard初始化开始,当前认证状态:', {
|
||||
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) {
|
||||
@@ -211,8 +225,7 @@ onMounted(async () => {
|
||||
return
|
||||
}
|
||||
|
||||
// initAuth() 已经验证过token,无需再次调用getProfile()
|
||||
// 直接加载用户账号
|
||||
// 加载用户账号
|
||||
await loadUserAccounts()
|
||||
} catch (error: any) {
|
||||
console.error('Dashboard初始化失败:', error)
|
||||
|
||||
Reference in New Issue
Block a user