fix(chat):建立连接前进行 token 有效性验证
This commit is contained in:
@@ -7,7 +7,9 @@ import React, {
|
||||
useState,
|
||||
} from "react";
|
||||
import { Box, Drawer, alpha, useTheme } from "@mui/material";
|
||||
import { useNotification } from "@refinedev/core";
|
||||
|
||||
import { getAccessToken } from "@/lib/authToken";
|
||||
import type { AgentModel } from "@/lib/chatStream";
|
||||
import { useProjectStore } from "@/store/projectStore";
|
||||
import { AgentComposer, type AgentComposerHandle } from "./AgentComposer";
|
||||
@@ -25,6 +27,7 @@ export const GlobalChatbox: React.FC<Props> = ({ open, onClose }) => {
|
||||
const [width, setWidth] = useState(520);
|
||||
const [isResizing, setIsResizing] = useState(false);
|
||||
const [isHistoryOpen, setIsHistoryOpen] = useState(false);
|
||||
const [isCheckingAuth, setIsCheckingAuth] = useState(false);
|
||||
const [selectedModel, setSelectedModel] = useState<AgentModel>(
|
||||
"deepseek/deepseek-v4-pro",
|
||||
);
|
||||
@@ -33,6 +36,7 @@ export const GlobalChatbox: React.FC<Props> = ({ open, onClose }) => {
|
||||
const composerRef = useRef<AgentComposerHandle | null>(null);
|
||||
const hasResetForOpenRef = useRef(false);
|
||||
const theme = useTheme();
|
||||
const { open: openNotification } = useNotification();
|
||||
const currentProjectId = useProjectStore((state) => state.currentProjectId);
|
||||
|
||||
const {
|
||||
@@ -108,10 +112,34 @@ export const GlobalChatbox: React.FC<Props> = ({ open, onClose }) => {
|
||||
return () => window.clearTimeout(timer);
|
||||
}, [createSession, isHydrating, open, scrollToBottom]);
|
||||
|
||||
const handleSend = useCallback((prompt: string) => {
|
||||
if (isStreaming) return;
|
||||
void sendPrompt(prompt);
|
||||
}, [isStreaming, sendPrompt]);
|
||||
const handleSend = useCallback(async (prompt: string) => {
|
||||
if (isStreaming || isCheckingAuth) return;
|
||||
|
||||
setIsCheckingAuth(true);
|
||||
try {
|
||||
const accessToken = await getAccessToken();
|
||||
if (!accessToken) {
|
||||
composerRef.current?.setValue(prompt);
|
||||
openNotification?.({
|
||||
type: "error",
|
||||
message: "登录状态已失效",
|
||||
description: "请重新登录后再发送对话。",
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
void sendPrompt(prompt);
|
||||
} catch (error) {
|
||||
composerRef.current?.setValue(prompt);
|
||||
openNotification?.({
|
||||
type: "error",
|
||||
message: "登录状态校验失败",
|
||||
description: error instanceof Error ? error.message : "请重新登录后再试。",
|
||||
});
|
||||
} finally {
|
||||
setIsCheckingAuth(false);
|
||||
}
|
||||
}, [isCheckingAuth, isStreaming, openNotification, sendPrompt]);
|
||||
|
||||
const handleNewConversation = useCallback(() => {
|
||||
handleStopSpeech();
|
||||
@@ -330,7 +358,7 @@ export const GlobalChatbox: React.FC<Props> = ({ open, onClose }) => {
|
||||
|
||||
<AgentComposer
|
||||
ref={composerRef}
|
||||
isHydrating={isHydrating}
|
||||
isHydrating={isHydrating || isCheckingAuth}
|
||||
isStreaming={isStreaming}
|
||||
isListening={isListening}
|
||||
isSttSupported={isSttSupported}
|
||||
|
||||
Reference in New Issue
Block a user