javascript - 当登录用户为假时,React 上的 PrivateRoute 不会重定向
问题描述
我正在尝试在我的应用程序中实现一些安全性并最终创建了以下代码:
import React from 'react';
import { Route, Redirect } from 'react-router-dom';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
const PrivateRoute = ({
component: Component,
auth: { isAuthenticated, loading },
...rest
}) => (
<Route
{...rest}
render={props =>
!isAuthenticated && !loading ? (
<Redirect to='/auth/login' />
) : (
<Component {...props} />
)
}
/>
);
PrivateRoute.propTypes = {
auth: PropTypes.object.isRequired
};
const mapStateToProps = state => ({
auth: state.auth
});
export default connect(mapStateToProps)(PrivateRoute);
auth
来自我的状态管理,当从我的 Chrome 浏览器上安装的 Redux Devtools 中查看时看起来完全一样;这里是:
isAuthenticated
并且loading
通常在用户登录时为真;效果很好。我遇到的问题是,当没有人登录时,我的 PrivateRoute 不会重定向到auth/login
页面。有谁知道如何解决这个问题?这是我需要 PrivateRoute 组件的路线之一的示例:
<PrivateRoute exact path='/edit-basics' component={EditBasics} />
上面的路线是编辑当前登录用户信息的页面,仅对他/她可用。我仍然可以在没有登录的情况下访问它。
解决方案
看起来您没有将 auth 道具传递给 PrivateRoute。尝试添加它。
<PrivateRoute exact path='/edit-basics' component={EditBasics} auth={this.props.auth}/>
推荐阅读
- oracle - 启动 Spring-boot/JPA 应用程序时出现 Broken Pipe 错误 - 立即测试查询成功
- doctrine-odm - 如何在控制器中获取特定的文档管理器?
- r - 应用 rollmean,但如果公司没有 k > 2,则保留单个值
- php - Sonata 管理员在 ajax 调用后存储一条消息
- java - 同步多线程以确保其中只有一个缓存结果(使用弹簧缓存)?
- javascript - 如何禁用 nuxt.js 的浏览器热模块重新加载?
- json - AWS Athena 使用嵌套的 json 创建表
- javascript - 不反映对 javascript 文件的更改
- node.js - 在 Windows 上运行 NodeJS 的 Web 请求中包含带证书的私钥
- r - R:ksvm 函数 - 错误:对象不是矩阵