diff --git a/web/app/(shareLayout)/webapp-signin/normalForm.tsx b/web/app/(shareLayout)/webapp-signin/normalForm.tsx
index d6bdf607ba..44006a9f1e 100644
--- a/web/app/(shareLayout)/webapp-signin/normalForm.tsx
+++ b/web/app/(shareLayout)/webapp-signin/normalForm.tsx
@@ -1,3 +1,4 @@
+'use client'
import React, { useCallback, useEffect, useState } from 'react'
import { useTranslation } from 'react-i18next'
import Link from 'next/link'
diff --git a/web/app/(shareLayout)/webapp-signin/page.tsx b/web/app/(shareLayout)/webapp-signin/page.tsx
index 967516c416..1c6209b902 100644
--- a/web/app/(shareLayout)/webapp-signin/page.tsx
+++ b/web/app/(shareLayout)/webapp-signin/page.tsx
@@ -1,36 +1,30 @@
'use client'
import { useRouter, useSearchParams } from 'next/navigation'
import type { FC } from 'react'
-import React, { useCallback, useEffect } from 'react'
+import React, { useCallback } from 'react'
import { useTranslation } from 'react-i18next'
-import Toast from '@/app/components/base/toast'
-import { removeAccessToken, setAccessToken } from '@/app/components/share/utils'
+import { removeAccessToken } from '@/app/components/share/utils'
import { useGlobalPublicStore } from '@/context/global-public-context'
-import Loading from '@/app/components/base/loading'
import AppUnavailable from '@/app/components/base/app-unavailable'
import NormalForm from './normalForm'
import { AccessMode } from '@/models/access-control'
import ExternalMemberSsoAuth from './components/external-member-sso-auth'
-import { fetchAccessToken } from '@/service/share'
+import { useWebAppStore } from '@/context/web-app-context'
const WebSSOForm: FC = () => {
const { t } = useTranslation()
const systemFeatures = useGlobalPublicStore(s => s.systemFeatures)
- const webAppAccessMode = useGlobalPublicStore(s => s.webAppAccessMode)
+ const webAppAccessMode = useWebAppStore(s => s.webAppAccessMode)
const searchParams = useSearchParams()
const router = useRouter()
const redirectUrl = searchParams.get('redirect_url')
- const tokenFromUrl = searchParams.get('web_sso_token')
- const message = searchParams.get('message')
- const code = searchParams.get('code')
const getSigninUrl = useCallback(() => {
- const params = new URLSearchParams(searchParams)
- params.delete('message')
- params.delete('code')
+ const params = new URLSearchParams()
+ params.append('redirect_url', redirectUrl || '')
return `/webapp-signin?${params.toString()}`
- }, [searchParams])
+ }, [redirectUrl])
const backToHome = useCallback(() => {
removeAccessToken()
@@ -38,73 +32,12 @@ const WebSSOForm: FC = () => {
router.replace(url)
}, [getSigninUrl, router])
- const showErrorToast = (msg: string) => {
- Toast.notify({
- type: 'error',
- message: msg,
- })
- }
-
- const getAppCodeFromRedirectUrl = useCallback(() => {
- if (!redirectUrl)
- return null
- const url = new URL(`${window.location.origin}${decodeURIComponent(redirectUrl)}`)
- const appCode = url.pathname.split('/').pop()
- if (!appCode)
- return null
-
- return appCode
- }, [redirectUrl])
-
- useEffect(() => {
- (async () => {
- if (message)
- return
-
- const appCode = getAppCodeFromRedirectUrl()
- if (appCode && tokenFromUrl && redirectUrl) {
- localStorage.setItem('webapp_access_token', tokenFromUrl)
- const tokenResp = await fetchAccessToken({ appCode, webAppAccessToken: tokenFromUrl })
- await setAccessToken(appCode, tokenResp.access_token)
- router.replace(decodeURIComponent(redirectUrl))
- return
- }
- if (appCode && redirectUrl && localStorage.getItem('webapp_access_token')) {
- const tokenResp = await fetchAccessToken({ appCode, webAppAccessToken: localStorage.getItem('webapp_access_token') })
- await setAccessToken(appCode, tokenResp.access_token)
- router.replace(decodeURIComponent(redirectUrl))
- }
- })()
- }, [getAppCodeFromRedirectUrl, redirectUrl, router, tokenFromUrl, message])
-
- useEffect(() => {
- if (webAppAccessMode && webAppAccessMode === AccessMode.PUBLIC && redirectUrl)
- router.replace(decodeURIComponent(redirectUrl))
- }, [webAppAccessMode, router, redirectUrl])
-
- if (tokenFromUrl) {
- return
-
-
- }
-
- if (message) {
- return
-
-
{code === '403' ? t('common.userProfile.logout') : t('share.login.backToHome')}
-
- }
if (!redirectUrl) {
- showErrorToast('redirect url is invalid.')
return
}
- if (webAppAccessMode && webAppAccessMode === AccessMode.PUBLIC) {
- return
-
-
- }
+
if (!systemFeatures.webapp_auth.enabled) {
return
{t('login.webapp.disabled')}
diff --git a/web/app/(shareLayout)/workflow/[token]/page.tsx b/web/app/(shareLayout)/workflow/[token]/page.tsx
index e93bc8c1af..4f5923e91f 100644
--- a/web/app/(shareLayout)/workflow/[token]/page.tsx
+++ b/web/app/(shareLayout)/workflow/[token]/page.tsx
@@ -1,10 +1,13 @@
import React from 'react'
import Main from '@/app/components/share/text-generation'
+import AuthenticatedLayout from '../../components/authenticated-layout'
const Workflow = () => {
return (
-
+
+
+
)
}
diff --git a/web/app/account/account-page/index.tsx b/web/app/account/account-page/index.tsx
index a469286900..55fa2983dd 100644
--- a/web/app/account/account-page/index.tsx
+++ b/web/app/account/account-page/index.tsx
@@ -21,6 +21,7 @@ import Input from '@/app/components/base/input'
import PremiumBadge from '@/app/components/base/premium-badge'
import { useGlobalPublicStore } from '@/context/global-public-context'
import EmailChangeModal from './email-change-modal'
+import { validPassword } from '@/config'
const titleClassName = `
system-sm-semibold text-text-secondary
@@ -29,8 +30,6 @@ const descriptionClassName = `
mt-1 body-xs-regular text-text-tertiary
`
-const validPassword = /^(?=.*[a-zA-Z])(?=.*\d).{8,}$/
-
export default function AccountPage() {
const { t } = useTranslation()
const { systemFeatures } = useGlobalPublicStore()
diff --git a/web/app/components/app-sidebar/app-info.tsx b/web/app/components/app-sidebar/app-info.tsx
index c28cc20df5..3817ebf5a4 100644
--- a/web/app/components/app-sidebar/app-info.tsx
+++ b/web/app/components/app-sidebar/app-info.tsx
@@ -308,13 +308,11 @@ const AppInfo = ({ expand, onlyShowDetail = false, openState = false, onDetailEx
operations={operations}
/>
-
-
-
+