Skip to content

Commit b636f42

Browse files
authored
🐛 When not logged in, access to the backend interface is not allowed #1476
2 parents fdee79c + 6b08b18 commit b636f42

File tree

6 files changed

+49
-32
lines changed

6 files changed

+49
-32
lines changed

frontend/app/[locale]/chat/page.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"use client";
22

33
import { useEffect } from "react";
4+
import { useAuth } from "@/hooks/useAuth";
45

56
import { useConfig } from "@/hooks/useConfig";
67
import { configService } from "@/services/configService";
@@ -9,6 +10,7 @@ import { ChatInterface } from "./internal/chatInterface";
910

1011
export default function ChatPage() {
1112
const { appConfig } = useConfig();
13+
const { user, isLoading: userLoading, openLoginModal, isSpeedMode } = useAuth();
1214

1315
useEffect(() => {
1416
// Load config from backend when entering chat page
@@ -19,6 +21,18 @@ export default function ChatPage() {
1921
}
2022
}, [appConfig.appName]);
2123

24+
// Require login on chat page when unauthenticated (full mode only)
25+
useEffect(() => {
26+
if (!isSpeedMode && !userLoading && !user) {
27+
openLoginModal();
28+
}
29+
}, [isSpeedMode, user, userLoading, openLoginModal]);
30+
31+
// Avoid rendering and backend calls when unauthenticated (full mode only)
32+
if (!isSpeedMode && (!user || userLoading)) {
33+
return null;
34+
}
35+
2236
return (
2337
<div className="flex h-screen flex-col">
2438
<ChatInterface />

frontend/app/[locale]/setup/agents/page.tsx

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export default function AgentSetupPage() {
2323
const { message } = App.useApp();
2424
const router = useRouter();
2525
const { t } = useTranslation();
26-
const { user, isLoading: userLoading } = useAuth();
26+
const { user, isLoading: userLoading, isSpeedMode, openLoginModal } = useAuth();
2727

2828
const [connectionStatus, setConnectionStatus] = useState<ConnectionStatus>(
2929
CONNECTION_STATUS.PROCESSING
@@ -33,22 +33,24 @@ export default function AgentSetupPage() {
3333

3434
// Check login status and permission
3535
useEffect(() => {
36-
if (!userLoading && !user) {
37-
router.push("/");
36+
if (!isSpeedMode && !userLoading && !user) {
37+
openLoginModal();
3838
return;
3939
}
4040

41-
// Only admin users can access this page
42-
if (user && user.role !== USER_ROLES.ADMIN) {
41+
// Only admin users can access this page (full mode)
42+
if (!isSpeedMode && user && user.role !== USER_ROLES.ADMIN) {
4343
router.push("/setup/knowledges");
4444
return;
4545
}
46-
}, [user, userLoading, router]);
46+
}, [isSpeedMode, user, userLoading, router, openLoginModal]);
4747

4848
// Check the connection status when the page is initialized
4949
useEffect(() => {
50-
checkModelEngineConnection();
51-
}, []);
50+
if (isSpeedMode || (user && !userLoading)) {
51+
checkModelEngineConnection();
52+
}
53+
}, [isSpeedMode, user, userLoading]);
5254

5355
// Function to check the ModelEngine connection status
5456
const checkModelEngineConnection = async () => {

frontend/app/[locale]/setup/knowledges/page.tsx

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export default function KnowledgeSetupPage() {
2525
const { message } = App.useApp();
2626
const router = useRouter();
2727
const { t } = useTranslation();
28-
const { user, isLoading: userLoading } = useAuth();
28+
const { user, isLoading: userLoading, isSpeedMode, openLoginModal } = useAuth();
2929

3030
const [connectionStatus, setConnectionStatus] = useState<ConnectionStatus>(
3131
CONNECTION_STATUS.PROCESSING
@@ -35,14 +35,15 @@ export default function KnowledgeSetupPage() {
3535

3636
// Check login status and permission
3737
useEffect(() => {
38-
if (!userLoading && !user) {
39-
router.push("/");
38+
if (!isSpeedMode && !userLoading && !user) {
39+
openLoginModal();
4040
return;
4141
}
42-
}, [user, userLoading, router]);
42+
}, [isSpeedMode, user, userLoading, openLoginModal]);
4343

4444
// Check the connection status when the page is initialized
4545
useEffect(() => {
46+
if (!(isSpeedMode || user)) return;
4647
checkModelEngineConnection();
4748

4849
// Trigger knowledge base data acquisition when the page is initialized
@@ -54,7 +55,7 @@ export default function KnowledgeSetupPage() {
5455

5556
// Load config for normal user
5657
const loadConfigForNormalUser = async () => {
57-
if (user && user.role !== USER_ROLES.ADMIN) {
58+
if (!isSpeedMode && user && user.role !== USER_ROLES.ADMIN) {
5859
try {
5960
await configService.loadConfigToFrontend();
6061
configStore.reloadFromStorage();
@@ -65,7 +66,7 @@ export default function KnowledgeSetupPage() {
6566
};
6667

6768
loadConfigForNormalUser();
68-
}, [user]);
69+
}, [isSpeedMode, user]);
6970

7071
// Function to check the ModelEngine connection status
7172
const checkModelEngineConnection = async () => {

frontend/app/[locale]/setup/models/page.tsx

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export default function ModelSetupPage() {
2727
const { message } = App.useApp();
2828
const router = useRouter();
2929
const { t } = useTranslation();
30-
const { user, isLoading: userLoading } = useAuth();
30+
const { user, isLoading: userLoading, isSpeedMode, openLoginModal } = useAuth();
3131

3232
const [connectionStatus, setConnectionStatus] = useState<ConnectionStatus>(
3333
CONNECTION_STATUS.PROCESSING
@@ -47,16 +47,18 @@ export default function ModelSetupPage() {
4747

4848
// Check login status and permission
4949
useEffect(() => {
50-
if (!userLoading && !user) {
51-
router.push("/");
50+
if (!isSpeedMode && !userLoading && !user) {
51+
openLoginModal();
5252
return;
5353
}
54-
}, [user, userLoading, router]);
54+
}, [isSpeedMode, user, userLoading, openLoginModal]);
5555

5656
// Check the connection status when the page is initialized
5757
useEffect(() => {
58-
checkModelEngineConnection();
59-
}, []);
58+
if (isSpeedMode || (user && !userLoading)) {
59+
checkModelEngineConnection();
60+
}
61+
}, [isSpeedMode, user, userLoading]);
6062

6163
// Function to check the ModelEngine connection status
6264
const checkModelEngineConnection = async () => {

frontend/components/auth/sessionListeners.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,9 @@ export function SessionListeners() {
7878
};
7979
}, []);
8080

81-
// Listen for session expiration events
81+
// Listen for session expiration events (skip in speed mode)
8282
useEffect(() => {
83+
if (isSpeedMode) return;
8384
const handleSessionExpired = (event: CustomEvent) => {
8485
// Directly call the wrapper function
8586
showSessionExpiredModal();
@@ -99,7 +100,7 @@ export function SessionListeners() {
99100
);
100101
};
101102
// Remove confirm from dependency array to avoid duplicate registration due to function reference changes
102-
}, [router, pathname, openLoginModal, setIsFromSessionExpired, modal]);
103+
}, [router, pathname, openLoginModal, setIsFromSessionExpired, modal, isSpeedMode]);
103104

104105
// When component first mounts, if no local session is found, show modal immediately
105106
useEffect(() => {

frontend/hooks/useAuth.ts

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,7 @@ export function AuthProvider({ children }: { children: (value: AuthContextType)
5757
const version = data.content?.deployment_version || data.deployment_version;
5858

5959
setIsSpeedMode(version === 'speed');
60-
61-
// If in speed mode and no user exists, perform auto login
62-
if (version === 'speed' && !user) {
63-
await performAutoLogin();
64-
}
60+
// In speed mode, do not perform any auto login; UI should not depend on login
6561
}
6662
} catch (error) {
6763
log.error('Failed to check deployment version:', error);
@@ -128,8 +124,9 @@ export function AuthProvider({ children }: { children: (value: AuthContextType)
128124
checkDeploymentVersion();
129125
}, []); // When user status changes, check again
130126

131-
// Check user login status
127+
// Check user login status (skip in speed mode)
132128
useEffect(() => {
129+
if (isSpeedMode) return;
133130
if (!isLoading && !user) {
134131
// When page is loaded, if not logged in, trigger session expired event
135132
// Only trigger on non-home path, and only when there is a session before
@@ -140,11 +137,11 @@ export function AuthProvider({ children }: { children: (value: AuthContextType)
140137
setShouldCheckSession(false); // After triggering the expired event, disable session check
141138
}
142139
}
143-
}, [user, isLoading, pathname, shouldCheckSession, t]);
140+
}, [user, isLoading, pathname, shouldCheckSession, t, isSpeedMode]);
144141

145-
// Session validity check, ensure the session in local storage is not expired
142+
// Session validity check, ensure the session in local storage is not expired (skip in speed mode)
146143
useEffect(() => {
147-
if (!user || isLoading || !shouldCheckSession) return;
144+
if (isSpeedMode || !user || isLoading || !shouldCheckSession) return;
148145

149146
const verifySession = () => {
150147
const lastVerifyTime = Number(localStorage.getItem('lastSessionVerifyTime') || 0);
@@ -177,7 +174,7 @@ export function AuthProvider({ children }: { children: (value: AuthContextType)
177174
const intervalId = setInterval(verifySession, 10000);
178175

179176
return () => clearInterval(intervalId);
180-
}, [user, isLoading, shouldCheckSession, t]);
177+
}, [isSpeedMode, user, isLoading, shouldCheckSession, t]);
181178

182179
const openLoginModal = () => {
183180
setIsRegisterModalOpen(false)

0 commit comments

Comments
 (0)