fix: keep search params in web app url when needs authorize (#21717)
This commit is contained in:
@@ -25,10 +25,13 @@ const Layout: FC<{
|
|||||||
}
|
}
|
||||||
|
|
||||||
let appCode: string | null = null
|
let appCode: string | null = null
|
||||||
if (redirectUrl)
|
if (redirectUrl) {
|
||||||
appCode = redirectUrl?.split('/').pop() || null
|
const url = new URL(`${window.location.origin}${decodeURIComponent(redirectUrl)}`)
|
||||||
else
|
appCode = url.pathname.split('/').pop() || null
|
||||||
|
}
|
||||||
|
else {
|
||||||
appCode = pathname.split('/').pop() || null
|
appCode = pathname.split('/').pop() || null
|
||||||
|
}
|
||||||
|
|
||||||
if (!appCode)
|
if (!appCode)
|
||||||
return
|
return
|
||||||
|
@@ -25,7 +25,10 @@ export default function CheckCode() {
|
|||||||
const redirectUrl = searchParams.get('redirect_url')
|
const redirectUrl = searchParams.get('redirect_url')
|
||||||
|
|
||||||
const getAppCodeFromRedirectUrl = useCallback(() => {
|
const getAppCodeFromRedirectUrl = useCallback(() => {
|
||||||
const appCode = redirectUrl?.split('/').pop()
|
if (!redirectUrl)
|
||||||
|
return null
|
||||||
|
const url = new URL(`${window.location.origin}${decodeURIComponent(redirectUrl)}`)
|
||||||
|
const appCode = url.pathname.split('/').pop()
|
||||||
if (!appCode)
|
if (!appCode)
|
||||||
return null
|
return null
|
||||||
|
|
||||||
@@ -62,7 +65,7 @@ export default function CheckCode() {
|
|||||||
localStorage.setItem('webapp_access_token', ret.data.access_token)
|
localStorage.setItem('webapp_access_token', ret.data.access_token)
|
||||||
const tokenResp = await fetchAccessToken({ appCode, webAppAccessToken: ret.data.access_token })
|
const tokenResp = await fetchAccessToken({ appCode, webAppAccessToken: ret.data.access_token })
|
||||||
await setAccessToken(appCode, tokenResp.access_token)
|
await setAccessToken(appCode, tokenResp.access_token)
|
||||||
router.replace(redirectUrl)
|
router.replace(decodeURIComponent(redirectUrl))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (error) { console.error(error) }
|
catch (error) { console.error(error) }
|
||||||
|
@@ -23,7 +23,10 @@ const ExternalMemberSSOAuth = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const getAppCodeFromRedirectUrl = useCallback(() => {
|
const getAppCodeFromRedirectUrl = useCallback(() => {
|
||||||
const appCode = redirectUrl?.split('/').pop()
|
if (!redirectUrl)
|
||||||
|
return null
|
||||||
|
const url = new URL(`${window.location.origin}${decodeURIComponent(redirectUrl)}`)
|
||||||
|
const appCode = url.pathname.split('/').pop()
|
||||||
if (!appCode)
|
if (!appCode)
|
||||||
return null
|
return null
|
||||||
|
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
'use client'
|
||||||
import Link from 'next/link'
|
import Link from 'next/link'
|
||||||
import { useCallback, useState } from 'react'
|
import { useCallback, useState } from 'react'
|
||||||
import { useTranslation } from 'react-i18next'
|
import { useTranslation } from 'react-i18next'
|
||||||
@@ -33,7 +34,10 @@ export default function MailAndPasswordAuth({ isEmailSetup }: MailAndPasswordAut
|
|||||||
const redirectUrl = searchParams.get('redirect_url')
|
const redirectUrl = searchParams.get('redirect_url')
|
||||||
|
|
||||||
const getAppCodeFromRedirectUrl = useCallback(() => {
|
const getAppCodeFromRedirectUrl = useCallback(() => {
|
||||||
const appCode = redirectUrl?.split('/').pop()
|
if (!redirectUrl)
|
||||||
|
return null
|
||||||
|
const url = new URL(`${window.location.origin}${decodeURIComponent(redirectUrl)}`)
|
||||||
|
const appCode = url.pathname.split('/').pop()
|
||||||
if (!appCode)
|
if (!appCode)
|
||||||
return null
|
return null
|
||||||
|
|
||||||
@@ -87,7 +91,7 @@ export default function MailAndPasswordAuth({ isEmailSetup }: MailAndPasswordAut
|
|||||||
localStorage.setItem('webapp_access_token', res.data.access_token)
|
localStorage.setItem('webapp_access_token', res.data.access_token)
|
||||||
const tokenResp = await fetchAccessToken({ appCode, webAppAccessToken: res.data.access_token })
|
const tokenResp = await fetchAccessToken({ appCode, webAppAccessToken: res.data.access_token })
|
||||||
await setAccessToken(appCode, tokenResp.access_token)
|
await setAccessToken(appCode, tokenResp.access_token)
|
||||||
router.replace(redirectUrl)
|
router.replace(decodeURIComponent(redirectUrl))
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Toast.notify({
|
Toast.notify({
|
||||||
|
@@ -23,7 +23,10 @@ const SSOAuth: FC<SSOAuthProps> = ({
|
|||||||
|
|
||||||
const redirectUrl = searchParams.get('redirect_url')
|
const redirectUrl = searchParams.get('redirect_url')
|
||||||
const getAppCodeFromRedirectUrl = useCallback(() => {
|
const getAppCodeFromRedirectUrl = useCallback(() => {
|
||||||
const appCode = redirectUrl?.split('/').pop()
|
if (!redirectUrl)
|
||||||
|
return null
|
||||||
|
const url = new URL(`${window.location.origin}${decodeURIComponent(redirectUrl)}`)
|
||||||
|
const appCode = url.pathname.split('/').pop()
|
||||||
if (!appCode)
|
if (!appCode)
|
||||||
return null
|
return null
|
||||||
|
|
||||||
|
@@ -46,7 +46,10 @@ const WebSSOForm: FC = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const getAppCodeFromRedirectUrl = useCallback(() => {
|
const getAppCodeFromRedirectUrl = useCallback(() => {
|
||||||
const appCode = redirectUrl?.split('/').pop()
|
if (!redirectUrl)
|
||||||
|
return null
|
||||||
|
const url = new URL(`${window.location.origin}${decodeURIComponent(redirectUrl)}`)
|
||||||
|
const appCode = url.pathname.split('/').pop()
|
||||||
if (!appCode)
|
if (!appCode)
|
||||||
return null
|
return null
|
||||||
|
|
||||||
@@ -63,20 +66,20 @@ const WebSSOForm: FC = () => {
|
|||||||
localStorage.setItem('webapp_access_token', tokenFromUrl)
|
localStorage.setItem('webapp_access_token', tokenFromUrl)
|
||||||
const tokenResp = await fetchAccessToken({ appCode, webAppAccessToken: tokenFromUrl })
|
const tokenResp = await fetchAccessToken({ appCode, webAppAccessToken: tokenFromUrl })
|
||||||
await setAccessToken(appCode, tokenResp.access_token)
|
await setAccessToken(appCode, tokenResp.access_token)
|
||||||
router.replace(redirectUrl)
|
router.replace(decodeURIComponent(redirectUrl))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (appCode && redirectUrl && localStorage.getItem('webapp_access_token')) {
|
if (appCode && redirectUrl && localStorage.getItem('webapp_access_token')) {
|
||||||
const tokenResp = await fetchAccessToken({ appCode, webAppAccessToken: localStorage.getItem('webapp_access_token') })
|
const tokenResp = await fetchAccessToken({ appCode, webAppAccessToken: localStorage.getItem('webapp_access_token') })
|
||||||
await setAccessToken(appCode, tokenResp.access_token)
|
await setAccessToken(appCode, tokenResp.access_token)
|
||||||
router.replace(redirectUrl)
|
router.replace(decodeURIComponent(redirectUrl))
|
||||||
}
|
}
|
||||||
})()
|
})()
|
||||||
}, [getAppCodeFromRedirectUrl, redirectUrl, router, tokenFromUrl, message])
|
}, [getAppCodeFromRedirectUrl, redirectUrl, router, tokenFromUrl, message])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (webAppAccessMode && webAppAccessMode === AccessMode.PUBLIC && redirectUrl)
|
if (webAppAccessMode && webAppAccessMode === AccessMode.PUBLIC && redirectUrl)
|
||||||
router.replace(redirectUrl)
|
router.replace(decodeURIComponent(redirectUrl))
|
||||||
}, [webAppAccessMode, router, redirectUrl])
|
}, [webAppAccessMode, router, redirectUrl])
|
||||||
|
|
||||||
if (tokenFromUrl) {
|
if (tokenFromUrl) {
|
||||||
|
@@ -85,14 +85,6 @@ const TextGeneration: FC<IMainProps> = ({
|
|||||||
|
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const pathname = usePathname()
|
const pathname = usePathname()
|
||||||
useEffect(() => {
|
|
||||||
const params = new URLSearchParams(searchParams)
|
|
||||||
if (params.has('mode')) {
|
|
||||||
params.delete('mode')
|
|
||||||
router.replace(`${pathname}?${params.toString()}`)
|
|
||||||
}
|
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
||||||
}, [])
|
|
||||||
|
|
||||||
// Notice this situation isCallBatchAPI but not in batch tab
|
// Notice this situation isCallBatchAPI but not in batch tab
|
||||||
const [isCallBatchAPI, setIsCallBatchAPI] = useState(false)
|
const [isCallBatchAPI, setIsCallBatchAPI] = useState(false)
|
||||||
|
@@ -110,7 +110,7 @@ function unicodeToChar(text: string) {
|
|||||||
|
|
||||||
function requiredWebSSOLogin(message?: string, code?: number) {
|
function requiredWebSSOLogin(message?: string, code?: number) {
|
||||||
const params = new URLSearchParams()
|
const params = new URLSearchParams()
|
||||||
params.append('redirect_url', globalThis.location.pathname)
|
params.append('redirect_url', encodeURIComponent(`${globalThis.location.pathname}${globalThis.location.search}`))
|
||||||
if (message)
|
if (message)
|
||||||
params.append('message', message)
|
params.append('message', message)
|
||||||
if (code)
|
if (code)
|
||||||
|
Reference in New Issue
Block a user