Procházet zdrojové kódy

fix: support authorization using session and user_id in URL. (#22898)

tags/1.7.1
NFish před 3 měsíci
rodič
revize
aca8b83669
Žádný účet není propojen s e-mailovou adresou tvůrce revize
1 změnil soubory, kde provedl 17 přidání a 3 odebrání
  1. 17
    3
      web/context/web-app-context.tsx

+ 17
- 3
web/context/web-app-context.tsx Zobrazit soubor



import type { ChatConfig } from '@/app/components/base/chat/types' import type { ChatConfig } from '@/app/components/base/chat/types'
import Loading from '@/app/components/base/loading' import Loading from '@/app/components/base/loading'
import { checkOrSetAccessToken } from '@/app/components/share/utils'
import { AccessMode } from '@/models/access-control' import { AccessMode } from '@/models/access-control'
import type { AppData, AppMeta } from '@/models/share' import type { AppData, AppMeta } from '@/models/share'
import { useGetWebAppAccessModeByCode } from '@/service/use-share' import { useGetWebAppAccessModeByCode } from '@/service/use-share'
const pathname = usePathname() const pathname = usePathname()
const searchParams = useSearchParams() const searchParams = useSearchParams()
const redirectUrlParam = searchParams.get('redirect_url') const redirectUrlParam = searchParams.get('redirect_url')
const session = searchParams.get('session')
const sysUserId = searchParams.get('sys.user_id')
const [shareCode, setShareCode] = useState<string | null>(null) const [shareCode, setShareCode] = useState<string | null>(null)
useEffect(() => { useEffect(() => {
const shareCodeFromRedirect = getShareCodeFromRedirectUrl(redirectUrlParam) const shareCodeFromRedirect = getShareCodeFromRedirectUrl(redirectUrlParam)
updateShareCode(newShareCode) updateShareCode(newShareCode)
}, [pathname, redirectUrlParam, updateShareCode]) }, [pathname, redirectUrlParam, updateShareCode])
const { isFetching, data: accessModeResult } = useGetWebAppAccessModeByCode(shareCode) const { isFetching, data: accessModeResult } = useGetWebAppAccessModeByCode(shareCode)
const [isFetchingAccessToken, setIsFetchingAccessToken] = useState(true)
useEffect(() => { useEffect(() => {
if (accessModeResult?.accessMode)
if (accessModeResult?.accessMode) {
updateWebAppAccessMode(accessModeResult.accessMode) updateWebAppAccessMode(accessModeResult.accessMode)
}, [accessModeResult, updateWebAppAccessMode])
if (isFetching) {
if (accessModeResult?.accessMode === AccessMode.PUBLIC && session && sysUserId) {
setIsFetchingAccessToken(true)
checkOrSetAccessToken(shareCode).finally(() => {
setIsFetchingAccessToken(false)
})
}
else {
setIsFetchingAccessToken(false)
}
}
}, [accessModeResult, updateWebAppAccessMode, setIsFetchingAccessToken, shareCode, session, sysUserId])
if (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>

Načítá se…
Zrušit
Uložit