From 22b11e4b4397c2be38c6b64b7503f1a5dffe2bc7 Mon Sep 17 00:00:00 2001 From: NFish Date: Wed, 27 Aug 2025 18:00:25 +0800 Subject: [PATCH] Fix/web app auth error (#24637) --- web/app/components/share/utils.ts | 1 + web/context/web-app-context.tsx | 6 ++++-- web/service/base.ts | 13 +++++++++---- web/service/use-share.ts | 8 -------- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/web/app/components/share/utils.ts b/web/app/components/share/utils.ts index 0c6457fb0..3f5303dfc 100644 --- a/web/app/components/share/utils.ts +++ b/web/app/components/share/utils.ts @@ -32,6 +32,7 @@ export const checkOrSetAccessToken = async (appCode?: string | null) => { [userId || 'DEFAULT']: res.access_token, } localStorage.setItem('token', JSON.stringify(accessTokenJson)) + localStorage.removeItem(CONVERSATION_ID_INFO) } } diff --git a/web/context/web-app-context.tsx b/web/context/web-app-context.tsx index deb7aea53..0fe1b56b0 100644 --- a/web/context/web-app-context.tsx +++ b/web/context/web-app-context.tsx @@ -11,6 +11,7 @@ import type { FC, PropsWithChildren } from 'react' import { useEffect } from 'react' import { useState } from 'react' import { create } from 'zustand' +import { useGlobalPublicStore } from './global-public-context' type WebAppStore = { shareCode: string | null @@ -56,6 +57,7 @@ const getShareCodeFromPathname = (pathname: string): string | null => { } const WebAppStoreProvider: FC = ({ children }) => { + const isGlobalPending = useGlobalPublicStore(s => s.isGlobalPending) const updateWebAppAccessMode = useWebAppStore(state => state.updateWebAppAccessMode) const updateShareCode = useWebAppStore(state => state.updateShareCode) const pathname = usePathname() @@ -69,7 +71,7 @@ const WebAppStoreProvider: FC = ({ children }) => { }, [shareCode, updateShareCode]) const { isFetching, data: accessModeResult } = useGetWebAppAccessModeByCode(shareCode) - const [isFetchingAccessToken, setIsFetchingAccessToken] = useState(false) + const [isFetchingAccessToken, setIsFetchingAccessToken] = useState(true) useEffect(() => { if (accessModeResult?.accessMode) { @@ -86,7 +88,7 @@ const WebAppStoreProvider: FC = ({ children }) => { } }, [accessModeResult, updateWebAppAccessMode, shareCode]) - if (isFetching || isFetchingAccessToken) { + if (isGlobalPending || isFetching || isFetchingAccessToken) { return
diff --git a/web/service/base.ts b/web/service/base.ts index aa6c77716..33aebf9cf 100644 --- a/web/service/base.ts +++ b/web/service/base.ts @@ -398,9 +398,7 @@ export const ssePost = async ( .then((res) => { if (!/^[23]\d{2}$/.test(String(res.status))) { if (res.status === 401) { - refreshAccessTokenOrRelogin(TIME_OUT).then(() => { - ssePost(url, fetchOptions, otherOptions) - }).catch(() => { + if (isPublicAPI) { res.json().then((data: any) => { if (isPublicAPI) { if (data.code === 'web_app_access_denied') @@ -417,7 +415,14 @@ export const ssePost = async ( } } }) - }) + } + else { + refreshAccessTokenOrRelogin(TIME_OUT).then(() => { + ssePost(url, fetchOptions, otherOptions) + }).catch((err) => { + console.error(err) + }) + } } else { res.json().then((data) => { diff --git a/web/service/use-share.ts b/web/service/use-share.ts index 63f18bf0e..6845a2f3c 100644 --- a/web/service/use-share.ts +++ b/web/service/use-share.ts @@ -1,20 +1,12 @@ -import { useGlobalPublicStore } from '@/context/global-public-context' -import { AccessMode } from '@/models/access-control' import { useQuery } from '@tanstack/react-query' import { fetchAppInfo, fetchAppMeta, fetchAppParams, getAppAccessModeByAppCode } from './share' const NAME_SPACE = 'webapp' export const useGetWebAppAccessModeByCode = (code: string | null) => { - const systemFeatures = useGlobalPublicStore(s => s.systemFeatures) return useQuery({ queryKey: [NAME_SPACE, 'appAccessMode', code], queryFn: () => { - if (systemFeatures.webapp_auth.enabled === false) { - return { - accessMode: AccessMode.PUBLIC, - } - } if (!code || code.length === 0) return Promise.reject(new Error('App code is required to get access mode'))