【发布时间】:2017-09-06 13:52:20
【问题描述】:
我正在尝试使用 react-router v4 实现一个受限路由,我几乎完成了,但我需要处理 JWT 令牌的验证,不知道该放在哪里。
受限路线
const RestrictedRoute = (props) => {
const { component, ...otherProps } = props;
return <Route {...otherProps} component={component} />;
};
const mapStateToProps = state => ({
authenticated: state.authentication.session,
});
const branched = branch(
({ authenticated }) => !authenticated,
renderComponent(() => <Redirect to="/login" />),
);
const enhanced = compose(
connect(mapStateToProps),
branched,
)(RestrictedRoute);
export default enhanced;
因此,如果state.authentication.session 设置为false,我可以将用户重定向到/login 页面。到目前为止,我一直在检查是否有 jwt cookie 并基于此设置 session。这有一些简单的漏洞,因为您可以添加任何值的jwt cookie,您将被视为已通过身份验证。
我创建了一个端点来验证我的jwt 令牌并为此创建了一个操作。我的问题是 - 把这个放在哪里?
如果我把它放在RestrictedRoute 的componentWillMount 中,并且经过身份验证的用户尝试访问受限页面,他会看到login 页面,然后切换到受限路由,因为来自端点的响应会更改 redux商店。
【问题讨论】: