FIX: lỗi màn hình đen trên docker
This commit is contained in:
+30
-13
@@ -15543,6 +15543,16 @@ const App = () => {
|
||||
// ── Auth / User State ──
|
||||
const [currentUser, setCurrentUser] = useState(null);
|
||||
const [authModalOpen, setAuthModalOpen] = useState(false);
|
||||
// 401 bất kỳ → mở màn login (bug 09:45 — màn đen khi token hỏng/hết hạn)
|
||||
React.useEffect(() => {
|
||||
window.__onAuthFail = () => {
|
||||
setCurrentUser(null);
|
||||
setIsMandatoryLogin(true);
|
||||
setAuthMode('login');
|
||||
setAuthModalOpen(true);
|
||||
};
|
||||
return () => { delete window.__onAuthFail; };
|
||||
}, []);
|
||||
const [authMode, setAuthMode] = useState('login'); // 'login' | 'register' | 'force_change'
|
||||
const [isMandatoryLogin, setIsMandatoryLogin] = useState(false);
|
||||
const [profileModalOpen, setProfileModalOpen] = useState(false);
|
||||
@@ -15847,20 +15857,27 @@ const App = () => {
|
||||
restoreLastSessionProject();
|
||||
}
|
||||
} catch (err) {
|
||||
const cached = localStorage.getItem('sonic_user');
|
||||
if (cached) {
|
||||
try { setCurrentUser(JSON.parse(cached)); } catch (_) { }
|
||||
setIsMandatoryLogin(false);
|
||||
setAuthModalOpen(false);
|
||||
restoreLastSessionProject();
|
||||
} else {
|
||||
localStorage.removeItem('sonic_token');
|
||||
localStorage.removeItem('sonic_user');
|
||||
setCurrentUser(null);
|
||||
setIsMandatoryLogin(true);
|
||||
setAuthMode('login');
|
||||
setAuthModalOpen(true);
|
||||
// 401 (token hỏng/đổi SECRET_KEY — bug 09:45: dùng cached user → vào app
|
||||
// nhưng mọi API 401 → màn đen không login) → BỎ qua cached → mở LOGIN.
|
||||
// detail server: "Thiếu Token xác thực..." / "Token đã hết hạn..." (auth.py)
|
||||
const errMsg = String((err && err.message) || err || '');
|
||||
const isAuthErr = errMsg.includes('Token') || errMsg.includes('401') || errMsg.includes('Unauthorized') || errMsg.includes('unauthorized') || errMsg.includes('Không xác thực');
|
||||
if (!isAuthErr) {
|
||||
const cached = localStorage.getItem('sonic_user');
|
||||
if (cached) {
|
||||
try { setCurrentUser(JSON.parse(cached)); } catch (_) { }
|
||||
setIsMandatoryLogin(false);
|
||||
setAuthModalOpen(false);
|
||||
restoreLastSessionProject();
|
||||
return;
|
||||
}
|
||||
}
|
||||
localStorage.removeItem('sonic_token');
|
||||
localStorage.removeItem('sonic_user');
|
||||
setCurrentUser(null);
|
||||
setIsMandatoryLogin(true);
|
||||
setAuthMode('login');
|
||||
setAuthModalOpen(true);
|
||||
}
|
||||
};
|
||||
checkAuthStatus();
|
||||
|
||||
Reference in New Issue
Block a user