javascript - 如何保护 React 中的路径?
问题描述
我按照这个页面创建了一个 React 应用程序,它运行良好。
但是,当我添加以下链接时:
<li>
<Link to='/protected/gg'>
Link to Protected Page GG
</Link>
</li>
浏览路径时显示“GG”一词,无需登录/protected/gg
。
似乎GuardedRoute
只能保护/protected
路径。
那么,是否可以保护/protected
文件夹下的所有内容?
如果是这样,你能告诉我该怎么做吗?或者给我一个关键字,以便我可以搜索解决方案。
解决方案
与其他答案类似,但 IMO 更简单一些。
虽然您可以只定义一个平面的路线列表,一些有保护,一些没有,但您可以创建“围墙保护”(看看我在那里做了什么)。
修改你GuardedRoute
的有条件地渲染一个Route
or Redirect
,传递所有其他道具。
const GuardedRoute = ({ auth, ...rest }) => {
return auth ? <Route {...rest} /> : <Redirect to="/" />;
};
然后只需在路由器中创建一个“受保护”部分。请记住,Switch
组件内的路由顺序很重要,因此在 *不太具体的路径之前排序更具体的路径。
<Switch>
<Route exact path="/" component={Home} />
<GuardedRoute path="/protected" auth={isAutheticated}>
<Switch>
<Route path="/protected/gg" component={GG} />
<Route path="/protected" component={Protected} />
</Switch>
</GuardedRoute>
<Route path="/unprotected" component={Unprotected} />
</Switch>
我通常使用codesandbox,但如果这个分叉的stackblitz 无法加载,请告诉我。
推荐阅读
- linux - 如何使用单个 linux 命令创建带有子文件夹的新文件夹?
- python - Python函数将二进制数字转换为十六进制
- javascript - 如何从复选框中获取选中的值(值)并使用 Angular 保存到数据库中
- javascript - 以毫秒为单位反应本机倒计时计时器
- node.js - EBUSY:尝试执行 npm install 时资源繁忙或锁定在 Docker 中
- android - 将每个字符的 EditText 错误设置为 null
- angular - 发射器不发射值
- angular - ngSubmit.emit() 不会改变 formGroup 的提交属性
- postgresql - 在 Sparx Enterprise Architect ODBC Postgres 上检索表列表时出错
- git - “远程分支”的“自动移动”是什么意思?