feat: 手机验证码调试

This commit is contained in:
zdl
2025-10-16 10:09:15 +08:00
parent 8ce9268e76
commit 7c166f7186
9 changed files with 212 additions and 108 deletions

View File

@@ -22,7 +22,7 @@ export const useAuth = () => {
// 认证提供者组件
export const AuthProvider = ({ children }) => {
const [user, setUser] = useState(null);
const [isLoading, setIsLoading] = useState(false); // ⚡ 改为 false不阻塞首屏渲染
const [isLoading, setIsLoading] = useState(true); // ⚡ 串行执行,阻塞渲染直到 Session 检查完成
const [isAuthenticated, setIsAuthenticated] = useState(false);
const navigate = useNavigate();
const toast = useToast();
@@ -66,8 +66,10 @@ export const AuthProvider = ({ children }) => {
// 网络错误或超时,设置为未登录状态
setUser(null);
setIsAuthenticated(false);
} finally {
// ⚡ Session 检查完成后,停止加载状态
setIsLoading(false);
}
// ⚡ 移除 finally 中的 setIsLoading(false),不再阻塞渲染
};
// ⚡ 初始化时检查Session - 并行执行,不阻塞页面渲染

View File

@@ -1,5 +1,7 @@
// src/contexts/AuthModalContext.js
import { createContext, useContext, useState, useCallback } from 'react';
import { useNavigate } from 'react-router-dom';
import { useAuth } from './AuthContext';
const AuthModalContext = createContext();
@@ -19,6 +21,9 @@ export const useAuthModal = () => {
* 管理统一的认证弹窗状态(登录/注册合并)
*/
export const AuthModalProvider = ({ children }) => {
const navigate = useNavigate();
const { isAuthenticated } = useAuth();
// 弹窗状态(统一的认证弹窗)
const [isAuthModalOpen, setIsAuthModalOpen] = useState(false);
@@ -41,12 +46,18 @@ export const AuthModalProvider = ({ children }) => {
/**
* 关闭认证弹窗
* 如果用户未登录,跳转到首页
*/
const closeModal = useCallback(() => {
setIsAuthModalOpen(false);
setRedirectUrl(null);
setOnSuccessCallback(null);
}, []);
// ⭐ 如果用户关闭弹窗时仍未登录,跳转到首页
if (!isAuthenticated) {
navigate('/home');
}
}, [isAuthenticated, navigate]);
/**
* 登录/注册成功处理
@@ -62,17 +73,12 @@ export const AuthModalProvider = ({ children }) => {
}
}
// 如果有重定向URL跳转
if (redirectUrl) {
// 使用 window.location.href 确保完整刷新页面状态
setTimeout(() => {
window.location.href = redirectUrl;
}, 500); // 延迟500ms让用户看到成功提示
}
// 关闭弹窗
closeModal();
}, [onSuccessCallback, redirectUrl, closeModal]);
// ⭐ 登录成功后,只关闭弹窗,留在当前页面(不跳转
// 移除了原有的 redirectUrl 跳转逻辑
setIsAuthModalOpen(false);
setRedirectUrl(null);
setOnSuccessCallback(null);
}, [onSuccessCallback]);
/**
* 提供给子组件的上下文值