优化获取昵称修改状态的时机

This commit is contained in:
2025-12-03 15:44:41 +08:00
parent 7c1a1fafc1
commit b77b4b0536
9 changed files with 160 additions and 128 deletions

View File

@@ -1,4 +1,8 @@
import { check_login_status, get_user_token, silentLogin } from "@/services/loginService";
import {
check_login_status,
get_user_token,
silentLogin,
} from "@/services/loginService";
import { useUser } from "@/store/userStore";
import tokenManager from "@/utils/tokenManager";
@@ -15,7 +19,7 @@ const initUserAuthCore = async (): Promise<void> => {
// 如果已经登录且有用户信息,跳过
const login_status = check_login_status();
const { user, fetchUserInfo } = useUser.getState();
const { user, fetchUserInfo, checkNicknameChangeStatus } = useUser.getState();
if (login_status && user && Object.keys(user).length > 0) {
return Promise.resolve();
}
@@ -27,8 +31,9 @@ const initUserAuthCore = async (): Promise<void> => {
// 已登录,获取用户信息
try {
await fetchUserInfo();
await checkNicknameChangeStatus();
} catch (error) {
console.error('获取用户信息失败:', error);
console.error("获取用户信息失败:", error);
}
} else {
// 未登录,尝试静默登录
@@ -37,14 +42,15 @@ const initUserAuthCore = async (): Promise<void> => {
if (loginResult.success) {
// 静默登录成功,获取用户信息
await fetchUserInfo();
await checkNicknameChangeStatus();
}
} catch (error) {
console.error('静默登录失败:', error);
console.error("静默登录失败:", error);
// 静默登录失败不影响使用
}
}
} catch (error) {
console.error('初始化用户授权失败:', error);
console.error("初始化用户授权失败:", error);
} finally {
isInitializingAuth = false;
authInitPromise = null;
@@ -60,7 +66,7 @@ export const waitForAuthInit = async (): Promise<void> => {
if (tokenManager.hasValidToken() || get_user_token()) {
return Promise.resolve();
}
// 如果正在初始化,等待完成
if (authInitPromise) {
await authInitPromise;
@@ -69,7 +75,7 @@ export const waitForAuthInit = async (): Promise<void> => {
return;
}
}
// 检查是否已经登录且有用户信息
const login_status = check_login_status();
const { user } = useUser.getState();
@@ -79,22 +85,26 @@ export const waitForAuthInit = async (): Promise<void> => {
return Promise.resolve();
}
}
// 触发初始化
const promise = initUserAuthCore();
await promise;
// 等待 token 真正存在(最多等待 2 秒)
let retryCount = 0;
const maxRetries = 20; // 20 * 100ms = 2秒
while (retryCount < maxRetries && !tokenManager.hasValidToken() && !get_user_token()) {
await new Promise(resolve => setTimeout(resolve, 100));
while (
retryCount < maxRetries &&
!tokenManager.hasValidToken() &&
!get_user_token()
) {
await new Promise((resolve) => setTimeout(resolve, 100));
retryCount++;
}
// 如果还是没有 token记录警告但继续执行
if (!tokenManager.hasValidToken() && !get_user_token()) {
console.warn('等待静默登录完成,但未获取到 token');
console.warn("等待静默登录完成,但未获取到 token");
}
};
@@ -102,4 +112,3 @@ export const waitForAuthInit = async (): Promise<void> => {
export const initUserAuth = () => {
return initUserAuthCore();
};