mirror of
https://github.com/langgenius/dify.git
synced 2024-11-16 11:42:29 +08:00
fix: check if setup is finished before validating access_token
This commit is contained in:
parent
eb83336bc9
commit
e1deeac706
|
@ -1,10 +1,11 @@
|
|||
'use client'
|
||||
|
||||
import { SWRConfig } from 'swr'
|
||||
import { useEffect, useState } from 'react'
|
||||
import { useCallback, useEffect, useState } from 'react'
|
||||
import type { ReactNode } from 'react'
|
||||
import { useRouter, useSearchParams } from 'next/navigation'
|
||||
import useRefreshToken from '@/hooks/use-refresh-token'
|
||||
import { fetchSetupStatus } from '@/service/common'
|
||||
|
||||
type SwrInitorProps = {
|
||||
children: ReactNode
|
||||
|
@ -21,27 +22,61 @@ const SwrInitor = ({
|
|||
const refreshTokenFromLocalStorage = localStorage?.getItem('refresh_token')
|
||||
const [init, setInit] = useState(false)
|
||||
|
||||
useEffect(() => {
|
||||
if (!(consoleToken || refreshToken || consoleTokenFromLocalStorage || refreshTokenFromLocalStorage)) {
|
||||
router.replace('/signin')
|
||||
return
|
||||
const isSetupFinished = useCallback(async () => {
|
||||
try {
|
||||
if (localStorage.getItem('setup_status') === 'finished')
|
||||
return true
|
||||
const setUpStatus = await fetchSetupStatus()
|
||||
if (setUpStatus.step !== 'finished') {
|
||||
localStorage.removeItem('setup_status')
|
||||
return false
|
||||
}
|
||||
localStorage.setItem('setup_status', 'finished')
|
||||
return true
|
||||
}
|
||||
if (consoleTokenFromLocalStorage && refreshTokenFromLocalStorage)
|
||||
getNewAccessToken()
|
||||
|
||||
if (consoleToken && refreshToken) {
|
||||
localStorage.setItem('console_token', consoleToken)
|
||||
localStorage.setItem('refresh_token', refreshToken)
|
||||
getNewAccessToken().then(() => {
|
||||
router.replace('/apps', { forceOptimisticNavigation: false } as any)
|
||||
}).catch(() => {
|
||||
router.replace('/signin')
|
||||
})
|
||||
catch (error) {
|
||||
console.error(error)
|
||||
return false
|
||||
}
|
||||
|
||||
setInit(true)
|
||||
}, [])
|
||||
|
||||
const setRefreshToken = useCallback(async () => {
|
||||
try {
|
||||
if (!(consoleToken || refreshToken || consoleTokenFromLocalStorage || refreshTokenFromLocalStorage))
|
||||
return Promise.reject(new Error('No token found'))
|
||||
|
||||
if (consoleTokenFromLocalStorage && refreshTokenFromLocalStorage)
|
||||
await getNewAccessToken()
|
||||
|
||||
if (consoleToken && refreshToken) {
|
||||
localStorage.setItem('console_token', consoleToken)
|
||||
localStorage.setItem('refresh_token', refreshToken)
|
||||
await getNewAccessToken()
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
return Promise.reject(error)
|
||||
}
|
||||
}, [consoleToken, refreshToken, consoleTokenFromLocalStorage, refreshTokenFromLocalStorage, getNewAccessToken])
|
||||
|
||||
useEffect(() => {
|
||||
(async () => {
|
||||
try {
|
||||
const isFinished = await isSetupFinished()
|
||||
if (!isFinished) {
|
||||
router.replace('/install')
|
||||
return
|
||||
}
|
||||
await setRefreshToken()
|
||||
router.replace('/apps', { forceOptimisticNavigation: false } as any)
|
||||
setInit(true)
|
||||
}
|
||||
catch (error) {
|
||||
router.replace('/signin')
|
||||
}
|
||||
})()
|
||||
}, [isSetupFinished, setRefreshToken, router])
|
||||
|
||||
return init
|
||||
? (
|
||||
<SWRConfig value={{
|
||||
|
|
|
@ -65,6 +65,7 @@ const InstallForm = () => {
|
|||
useEffect(() => {
|
||||
fetchSetupStatus().then((res: SetupStatusResponse) => {
|
||||
if (res.step === 'finished') {
|
||||
localStorage.setItem('setup_status', 'finished')
|
||||
window.location.href = '/signin'
|
||||
}
|
||||
else {
|
||||
|
|
Loading…
Reference in New Issue
Block a user