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 相关文章推荐
JS setCapture 区域外事件捕捉
Mar 18 Javascript
javascript中的Base64、UTF8编码与解码详解
Mar 18 Javascript
AngularJS的一些基本样式初窥
Jul 27 Javascript
Bootstrap每天必学之轮播(Carousel)插件
Apr 25 Javascript
聊一聊JavaScript作用域和作用域链
May 03 Javascript
js实现定时进度条完成后切换图片
Jan 04 Javascript
jQuery基本筛选选择器实例代码
Feb 06 Javascript
基于JavaScript实现抽奖系统
Jan 16 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
Aug 17 Javascript
layer.open 获取不到表单信息的解决方法
Sep 26 Javascript
vuex(vue状态管理)的特殊应用案例分享
Mar 03 Javascript
如何利用JS将手机号中间四位变成*号
Sep 29 Javascript
详解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 批量删除 sql语句
2009/06/05 PHP
php使用post数组的键值创建同名变量并赋值的方法
2015/04/03 PHP
thinkphp 抓取网站的内容并且保存到本地的实例详解
2017/08/25 PHP
javascript中input中readonly和disabled区别介绍
2012/10/23 Javascript
jquery 提交值不为空的元素示例代码
2013/05/10 Javascript
javascript常用功能汇总
2015/07/05 Javascript
javascript字符串循环匹配实例分析
2015/07/17 Javascript
《JavaScript函数式编程》读后感
2015/08/07 Javascript
AngularJS中的包含详细介绍及实现示例
2016/07/28 Javascript
jQuery查找节点并获取节点属性的方法
2016/09/09 Javascript
javascript动画之磁性吸附效果篇
2016/12/09 Javascript
详解Javascript几种跨域方式总结
2017/02/27 Javascript
JS文件/图片从电脑里面拖拽到浏览器上传文件/图片
2017/03/08 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
2017/07/13 Javascript
利用node.js爬取指定排名网站的JS引用库详解
2017/07/25 Javascript
Vue 兄弟组件通信的方法(不使用Vuex)
2017/10/26 Javascript
vue的常用组件操作方法应用分析
2018/04/13 Javascript
深入浅出了解Node.js Streams
2019/05/27 Javascript
Vue实现数据表格合并列rowspan效果
2020/11/30 Javascript
讲解python参数和作用域的使用
2013/11/01 Python
用 Python 爬了爬自己的微信朋友(实例讲解)
2017/08/25 Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
2019/01/05 Python
75条笑死人的知乎神回复,用60行代码就爬完了
2019/05/06 Python
pyspark给dataframe增加新的一列的实现示例
2020/04/24 Python
Python3实现个位数字和十位数字对调, 其乘积不变
2020/05/03 Python
详解tensorflow之过拟合问题实战
2020/11/01 Python
20佳惊艳的HTML5应用程序示例分享
2011/05/03 HTML / CSS
说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法
2012/05/24 面试题
新郎新娘婚礼答谢词
2014/01/11 职场文书
村干部四风问题整改措施
2014/09/30 职场文书
迁户口计划生育证明
2014/10/19 职场文书
2015年安全员工作总结范文
2015/04/22 职场文书
MySQL学习必备条件查询数据
2022/03/25 MySQL
Innodb存储引擎中的后台线程详解
2022/04/03 MySQL
Golang 入门 之url 包
2022/05/04 Golang
Python实现双向链表基本操作
2022/05/25 Python