Browse Source

Fix/web app auth error (#24637)

tags/1.8.1
NFish 2 months ago
parent
commit
22b11e4b43
No account linked to committer's email address

+ 1
- 0
web/app/components/share/utils.ts View File

[userId || 'DEFAULT']: res.access_token, [userId || 'DEFAULT']: res.access_token,
} }
localStorage.setItem('token', JSON.stringify(accessTokenJson)) localStorage.setItem('token', JSON.stringify(accessTokenJson))
localStorage.removeItem(CONVERSATION_ID_INFO)
} }
} }



+ 4
- 2
web/context/web-app-context.tsx View File

import { useEffect } from 'react' import { useEffect } from 'react'
import { useState } from 'react' import { useState } from 'react'
import { create } from 'zustand' import { create } from 'zustand'
import { useGlobalPublicStore } from './global-public-context'


type WebAppStore = { type WebAppStore = {
shareCode: string | null shareCode: string | null
} }


const WebAppStoreProvider: FC<PropsWithChildren> = ({ children }) => { const WebAppStoreProvider: FC<PropsWithChildren> = ({ children }) => {
const isGlobalPending = useGlobalPublicStore(s => s.isGlobalPending)
const updateWebAppAccessMode = useWebAppStore(state => state.updateWebAppAccessMode) const updateWebAppAccessMode = useWebAppStore(state => state.updateWebAppAccessMode)
const updateShareCode = useWebAppStore(state => state.updateShareCode) const updateShareCode = useWebAppStore(state => state.updateShareCode)
const pathname = usePathname() const pathname = usePathname()
}, [shareCode, updateShareCode]) }, [shareCode, updateShareCode])


const { isFetching, data: accessModeResult } = useGetWebAppAccessModeByCode(shareCode) const { isFetching, data: accessModeResult } = useGetWebAppAccessModeByCode(shareCode)
const [isFetchingAccessToken, setIsFetchingAccessToken] = useState(false)
const [isFetchingAccessToken, setIsFetchingAccessToken] = useState(true)


useEffect(() => { useEffect(() => {
if (accessModeResult?.accessMode) { if (accessModeResult?.accessMode) {
} }
}, [accessModeResult, updateWebAppAccessMode, shareCode]) }, [accessModeResult, updateWebAppAccessMode, shareCode])


if (isFetching || isFetchingAccessToken) {
if (isGlobalPending || isFetching || isFetchingAccessToken) {
return <div className='flex h-full w-full items-center justify-center'> return <div className='flex h-full w-full items-center justify-center'>
<Loading /> <Loading />
</div> </div>

+ 9
- 4
web/service/base.ts View File

.then((res) => { .then((res) => {
if (!/^[23]\d{2}$/.test(String(res.status))) { if (!/^[23]\d{2}$/.test(String(res.status))) {
if (res.status === 401) { if (res.status === 401) {
refreshAccessTokenOrRelogin(TIME_OUT).then(() => {
ssePost(url, fetchOptions, otherOptions)
}).catch(() => {
if (isPublicAPI) {
res.json().then((data: any) => { res.json().then((data: any) => {
if (isPublicAPI) { if (isPublicAPI) {
if (data.code === 'web_app_access_denied') if (data.code === 'web_app_access_denied')
} }
} }
}) })
})
}
else {
refreshAccessTokenOrRelogin(TIME_OUT).then(() => {
ssePost(url, fetchOptions, otherOptions)
}).catch((err) => {
console.error(err)
})
}
} }
else { else {
res.json().then((data) => { res.json().then((data) => {

+ 0
- 8
web/service/use-share.ts View File

import { useGlobalPublicStore } from '@/context/global-public-context'
import { AccessMode } from '@/models/access-control'
import { useQuery } from '@tanstack/react-query' import { useQuery } from '@tanstack/react-query'
import { fetchAppInfo, fetchAppMeta, fetchAppParams, getAppAccessModeByAppCode } from './share' import { fetchAppInfo, fetchAppMeta, fetchAppParams, getAppAccessModeByAppCode } from './share'


const NAME_SPACE = 'webapp' const NAME_SPACE = 'webapp'


export const useGetWebAppAccessModeByCode = (code: string | null) => { export const useGetWebAppAccessModeByCode = (code: string | null) => {
const systemFeatures = useGlobalPublicStore(s => s.systemFeatures)
return useQuery({ return useQuery({
queryKey: [NAME_SPACE, 'appAccessMode', code], queryKey: [NAME_SPACE, 'appAccessMode', code],
queryFn: () => { queryFn: () => {
if (systemFeatures.webapp_auth.enabled === false) {
return {
accessMode: AccessMode.PUBLIC,
}
}
if (!code || code.length === 0) if (!code || code.length === 0)
return Promise.reject(new Error('App code is required to get access mode')) return Promise.reject(new Error('App code is required to get access mode'))



Loading…
Cancel
Save