You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React Router v6中使用Asgardeo的SecureRoute组件?

解决Asgardeo React SDK搭配React Router v6的路由保护问题

React Router v6对路由结构做了严格限制,<Routes>的直接子节点必须是<Route>或<React.Fragment>,这就是你遇到[Wi] is not a <Route> component错误的原因——旧版的<SecureRoute>写法不符合v6的要求。

针对React Router v6,Asgardeo React SDK v2.x已经适配了新的用法,有两种常用实现方式:

方式一:将SecureRoute作为Route的element内容包裹组件

修改路由代码,把<SecureRoute>放到<Route>的element属性中,作为页面组件的包裹层:

import { SecureRoute } from "@asgardeo/auth-react";
import { BrowserRouter, Routes, Route } from "react-router-dom";

// ...

<BrowserRouter>
    <Routes>
        <Route path="/" element={<LandingPage />}/>
        <Route 
            path="/home" 
            element={
                <SecureRoute callback={() => signIn()}>
                    <HomePage />
                </SecureRoute>
            }
        />
    </Routes>
</BrowserRouter>

方式二:使用withSecureRouter高阶组件包装页面组件

先通过高阶组件把需要保护的页面组件转换成受保护版本,再在路由中直接使用:

import { withSecureRouter } from "@asgardeo/auth-react";
import { BrowserRouter, Routes, Route } from "react-router-dom";

// 用高阶组件包装HomePage并配置登录回调
const ProtectedHomePage = withSecureRouter(HomePage, {
    callback: () => signIn()
});

// ...

<BrowserRouter>
    <Routes>
        <Route path="/" element={<LandingPage />}/>
        <Route path="/home" element={<ProtectedHomePage />}/>
    </Routes>
</BrowserRouter>

两种方式都能实现路由保护效果:未登录用户访问/home时,会触发signIn()回调跳转到登录流程。

内容的提问来源于stack exchange,提问作者Mohamed Ishad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 12:05:24