Fix/web app auth error (#24637)
This commit is contained in:
@@ -32,6 +32,7 @@ export const checkOrSetAccessToken = async (appCode?: string | null) => {
|
|||||||
[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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -11,6 +11,7 @@ import type { FC, PropsWithChildren } from 'react'
|
|||||||
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
|
||||||
@@ -56,6 +57,7 @@ const getShareCodeFromPathname = (pathname: string): 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()
|
||||||
@@ -69,7 +71,7 @@ const WebAppStoreProvider: FC<PropsWithChildren> = ({ children }) => {
|
|||||||
}, [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) {
|
||||||
@@ -86,7 +88,7 @@ const WebAppStoreProvider: FC<PropsWithChildren> = ({ children }) => {
|
|||||||
}
|
}
|
||||||
}, [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>
|
||||||
|
@@ -398,9 +398,7 @@ export const ssePost = async (
|
|||||||
.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(() => {
|
if (isPublicAPI) {
|
||||||
ssePost(url, fetchOptions, otherOptions)
|
|
||||||
}).catch(() => {
|
|
||||||
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')
|
||||||
@@ -417,8 +415,15 @@ export const ssePost = async (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
refreshAccessTokenOrRelogin(TIME_OUT).then(() => {
|
||||||
|
ssePost(url, fetchOptions, otherOptions)
|
||||||
|
}).catch((err) => {
|
||||||
|
console.error(err)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
res.json().then((data) => {
|
res.json().then((data) => {
|
||||||
Toast.notify({ type: 'error', message: data.message || 'Server Error' })
|
Toast.notify({ type: 'error', message: data.message || 'Server Error' })
|
||||||
|
@@ -1,20 +1,12 @@
|
|||||||
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'))
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user