fix: 完善用户路由和注册回调
- App.tsx 导入 hasValidUserSession 修复 TS 编译错误 - UserRegister 增加 onLogin 回调,注册成功自动跳转
This commit is contained in:
+6
-2
@@ -5,7 +5,7 @@ import SearchModal from './components/SearchModal.js';
|
|||||||
import NotificationPanel from './components/NotificationPanel.js';
|
import NotificationPanel from './components/NotificationPanel.js';
|
||||||
import TooltipLayer from './components/TooltipLayer.js';
|
import TooltipLayer from './components/TooltipLayer.js';
|
||||||
import { api } from './api.js';
|
import { api } from './api.js';
|
||||||
import { clearAuthSession, hasValidAuthSession, persistAuthSession } from './authSession.js';
|
import { clearAuthSession, hasValidAuthSession, hasValidUserSession, persistAuthSession } from './authSession.js';
|
||||||
import {
|
import {
|
||||||
FIRST_USE_DOC_REMINDER_KEY,
|
FIRST_USE_DOC_REMINDER_KEY,
|
||||||
LEGACY_THEME_STORAGE_KEY,
|
LEGACY_THEME_STORAGE_KEY,
|
||||||
@@ -735,6 +735,10 @@ function AppShell() {
|
|||||||
const isUserPage = location.pathname.startsWith('/user/');
|
const isUserPage = location.pathname.startsWith('/user/');
|
||||||
const isPublicUserPage = ['/user/login', '/user/register'].includes(location.pathname);
|
const isPublicUserPage = ['/user/login', '/user/register'].includes(location.pathname);
|
||||||
|
|
||||||
|
if (isUserPage && isPublicUserPage && userAuthed) {
|
||||||
|
return <Navigate to="/user/dashboard" />;
|
||||||
|
}
|
||||||
|
|
||||||
if (!authed && !isUserPage) {
|
if (!authed && !isUserPage) {
|
||||||
return <Login t={t} onLogin={(token) => {
|
return <Login t={t} onLogin={(token) => {
|
||||||
persistAuthSession(localStorage, token);
|
persistAuthSession(localStorage, token);
|
||||||
@@ -751,7 +755,7 @@ function AppShell() {
|
|||||||
<Suspense fallback={<RouteLoadingFallback />}>
|
<Suspense fallback={<RouteLoadingFallback />}>
|
||||||
<Routes>
|
<Routes>
|
||||||
<Route path="/user/login" element={<UserLogin onLogin={() => setUserAuthed(true)} />} />
|
<Route path="/user/login" element={<UserLogin onLogin={() => setUserAuthed(true)} />} />
|
||||||
<Route path="/user/register" element={<UserRegister />} />
|
<Route path="/user/register" element={<UserRegister onLogin={() => setUserAuthed(true)} />} />
|
||||||
</Routes>
|
</Routes>
|
||||||
</Suspense>
|
</Suspense>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import React, { useState } from 'react';
|
|||||||
import { useNavigate, Link } from 'react-router-dom';
|
import { useNavigate, Link } from 'react-router-dom';
|
||||||
import { persistUserSession } from '../authSession.js';
|
import { persistUserSession } from '../authSession.js';
|
||||||
|
|
||||||
export default function UserRegister() {
|
export default function UserRegister({ onLogin }: { onLogin?: () => void }) {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const [username, setUsername] = useState('');
|
const [username, setUsername] = useState('');
|
||||||
const [email, setEmail] = useState('');
|
const [email, setEmail] = useState('');
|
||||||
@@ -36,6 +36,7 @@ export default function UserRegister() {
|
|||||||
}
|
}
|
||||||
const result = await res.json();
|
const result = await res.json();
|
||||||
persistUserSession(localStorage, result.token);
|
persistUserSession(localStorage, result.token);
|
||||||
|
onLogin?.();
|
||||||
navigate('/user/dashboard');
|
navigate('/user/dashboard');
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
setError(err?.message || '注册失败');
|
setError(err?.message || '注册失败');
|
||||||
|
|||||||
Reference in New Issue
Block a user