fix: guard H5 direct routes and refine legacy UI

This commit is contained in:
Codex
2026-07-02 02:31:49 +08:00
parent 60b1cb227c
commit 22a87f541a
7 changed files with 371 additions and 19 deletions

View File

@@ -1,9 +1,9 @@
import { useEffect, useState } from 'react';
import Taro from '@tarojs/taro';
import Taro, { useRouter } from '@tarojs/taro';
import { Button, Text, View } from '@tarojs/components';
import { appEnv, assertFrontendSecretsAreAbsent, ensureRuntimeConfigLoaded, isH5Runtime } from '@/env';
import { resolveTenant } from '@/services/api';
import { landingPath, requirePlatformAdmin, requireTenantAdmin } from '@/services/routeGuard';
import { landingPath, requirePlatformAdmin, requireSignedIn, requireTenantAdmin, safeRedirectPath } from '@/services/routeGuard';
import './index.css';
function hostFromRuntime() {
@@ -12,23 +12,25 @@ function hostFromRuntime() {
}
export default function BootstrapPage() {
const router = useRouter();
const [status, setStatus] = useState('正在解析租户');
const [error, setError] = useState('');
useEffect(() => {
const redirectPath = safeRedirectPath(router.params?.redirect ? decodeURIComponent(router.params.redirect) : landingPath());
assertFrontendSecretsAreAbsent();
ensureRuntimeConfigLoaded()
.then(() => resolveTenant({ host: hostFromRuntime() }))
.then(async () => {
if (appEnv.portal === 'student') return null;
setStatus('正在校验登录状态');
if (appEnv.portal === 'platform-admin') return requirePlatformAdmin(landingPath());
return requireTenantAdmin(landingPath());
if (appEnv.portal === 'student') return requireSignedIn(redirectPath);
if (appEnv.portal === 'platform-admin') return requirePlatformAdmin(redirectPath);
return requireTenantAdmin(redirectPath);
})
.then(authPayload => {
if (appEnv.portal !== 'student' && !authPayload) return;
if (!authPayload) return;
setStatus('租户解析完成');
Taro.redirectTo({ url: landingPath() });
Taro.redirectTo({ url: redirectPath });
})
.catch((nextError: Error) => {
setError(nextError.message);