React从react-router路由上做登陆验证控制的方法
本文介绍了React从react-router路由上做登陆验证控制的方法,分享给大家,具体如下:
验证代码
import React from 'react' import {connect} from 'react-redux'; function requireAuthentication(Component) { // 组件有已登陆的模块 直接返回 (防止从新渲染) if (Component.AuthenticatedComponent) { return Component.AuthenticatedComponent } // 创建验证组件 class AuthenticatedComponent extends React.Component { static contextTypes = { router: React.PropTypes.object.isRequired, } state = { login: true, } componentWillMount() { this.checkAuth(); } componentWillReceiveProps(nextProps) { this.checkAuth(); } checkAuth() { // 判断登陆 const token = this.props.token; const login = token ? token.login : null; // 未登陆重定向到登陆页面 if (!login) { let redirect = this.props.location.pathname + this.props.location.search; this.context.router.push('/login?message=401&redirect_uri=' + encodeURIComponent(redirect)); return; } this.setState({login}); } render() { if (this.state.login) { return <Component {...this.props}/> } return '' } } // 不使用 react-redux 的话直接返回 // Component.AuthenticatedComponent = AuthenticatedComponent // return Component.AuthenticatedComponent function mapStateToProps(state) { return { token: state.token, }; } function mapDispatchToProps(dispatch) { return {}; } Component.AuthenticatedComponent = connect(mapStateToProps, mapDispatchToProps)(AuthenticatedComponent); return Component.AuthenticatedComponent }
路由上使用
<Router history={browserHistory}> <Route path="/admin" component={requireAuthentication(AdminComponent)} /> </Router>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
您可能感兴趣的文章:
- 详解React-Router中Url参数改变页面不刷新的解决办法
- react router4+redux实现路由权限控制的方法
- React Router v4 入坑指南(小结)
- 在react-router4中进行代码拆分的方法(基于webpack)
- react-router4 配合webpack require.ensure 实现异步加载的示例
- react-router v4如何使用history控制路由跳转详解
- 关于react-router/react-router-dom v4 history不能访问问题的解决
- 详解react-router 4.0 下服务器如何配合BrowserRouter
- 浅谈react-router HashRouter和BrowserRouter的使用
- react-router browserHistory刷新页面404问题解决方法
赞 (0)