React从react-router路由上做登陆验证控制的方法


Posted in Javascript onMay 10, 2018

本文介绍了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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Google Map API更新实现用户自定义标注坐标
Jul 29 Javascript
js替代copy(示例代码)
Nov 27 Javascript
jquery+php实现搜索框自动提示
Nov 28 Javascript
详解JavaScript逻辑Not运算符
Dec 04 Javascript
js的三种继承方式详解
Jan 21 Javascript
详解从angular-cli:1.0.0-beta.28.3升级到@angular/cli:1.0.0
May 22 Javascript
搭建element-ui的Vue前端工程操作实例
Feb 23 Javascript
vue 界面刷新数据被清除 localStorage的使用详解
Sep 16 Javascript
video.js 一个页面同时播放多个视频的实例代码
Nov 27 Javascript
JS+php后台实现文件上传功能详解
Mar 02 Javascript
vue中实现点击按钮滚动到页面对应位置的方法(使用c3平滑属性实现)
Dec 29 Javascript
Vue仿百度搜索功能
Dec 28 Vue.js
详解Angular路由之路由守卫
May 10 #Javascript
JavaScript实现一个简易的计算器实例代码
May 10 #Javascript
浅谈node.js 命令行工具(cli)
May 10 #Javascript
Js经典案例的实例代码
May 10 #Javascript
Vue使用vux-ui自定义表单验证遇到的问题及解决方法
May 10 #Javascript
vuex与组件联合使用的方法
May 10 #Javascript
vue项目中公用footer组件底部位置的适配问题
May 10 #Javascript
You might like
PHP获取Exif缩略图的方法
2015/07/13 PHP
PHP多维数组遍历方法(2种实现方法)
2015/12/10 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
PHP实现负载均衡下的session共用功能
2018/04/17 PHP
Laravel模型间关系设置分表的方法示例
2018/04/21 PHP
PHP实现的多进程控制demo示例
2019/07/22 PHP
JQuery中getJSON的使用方法
2010/12/13 Javascript
node.js中的fs.readlink方法使用说明
2014/12/17 Javascript
Javascript中使用A标签获取当前目录的绝对路径方法
2015/03/02 Javascript
深入学习JavaScript中的原型prototype
2015/08/13 Javascript
jquery中validate与form插件提交的方式小结
2016/03/26 Javascript
JS hashMap实例详解
2016/05/26 Javascript
JS不完全国际化&amp;本地化手册 之 理论篇
2016/09/27 Javascript
如何获取元素的最终background-color
2017/02/06 Javascript
Angular.Js中过滤器filter与自定义过滤器filter实例详解
2017/05/08 Javascript
详解Vue.js分发之作用域槽
2017/06/13 Javascript
详解vue-cli中配置sass
2017/06/21 Javascript
nodejs socket服务端和客户端简单通信功能
2017/09/14 NodeJs
VUE element-ui 写个复用Table组件的示例代码
2017/11/18 Javascript
详解VUE2.X过滤器的使用方法
2018/01/11 Javascript
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
2018/05/15 NodeJs
js表达式与运算符简单操作示例
2020/02/15 Javascript
Element图表初始大小及窗口自适应实现
2020/07/10 Javascript
vue 插槽简介及使用示例
2020/11/19 Vue.js
Python标准库与第三方库详解
2014/07/22 Python
python里对list中的整数求平均并排序
2014/09/12 Python
Python3连接MySQL(pymysql)模拟转账实现代码
2016/05/24 Python
Python获取一个用户名的组ID过程解析
2019/09/03 Python
Python sorted排序方法如何实现
2020/03/31 Python
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
Lampenwelt德国:欧洲领先的灯具和照明在线商店
2018/08/05 全球购物
Currentbody美国/加拿大:美容仪专家
2020/03/09 全球购物
信息技术课教学反思
2016/02/23 职场文书
2016年小学“公民道德宣传日”活动总结
2016/04/01 职场文书
如何用Node.js编写内存效率高的应用程序
2021/04/30 Javascript
python manim实现排序算法动画示例
2022/08/14 Python