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判断运行jsp页面的浏览器类型以及版本示例
Oct 30 Javascript
javascript搜索框效果实现方法
May 14 Javascript
Bootstrap导航栏各元素操作方法(表单、按钮、文本)
Dec 28 Javascript
jQuery validate插件实现ajax验证重复的2种方法
Jan 22 Javascript
bootstrap和jQuery.Gantt的css冲突 如何解决
May 29 Javascript
AngularJS实现单独作用域内的数据操作
Sep 05 Javascript
Vue.Js中的$watch()方法总结
Mar 23 Javascript
vue-cli单页应用改成多页应用配置详解
Jul 14 Javascript
vue.js使用v-pre与v-html输出HTML操作示例
Jul 07 Javascript
vue构建动态表单的方法示例
Sep 22 Javascript
jQuery实现适用于移动端的跑马灯抽奖特效示例
Jan 18 jQuery
vue计算属性computed、事件、监听器watch的使用讲解
Jan 21 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分页初探 一个最简单的PHP分页代码的简单实现
2016/06/21 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
2017/08/07 PHP
PHP底层运行机制与工作原理详解
2020/07/31 PHP
利用js跨页面保存变量做菜单的方法
2008/01/17 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
2013/10/16 Javascript
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
基于Jquery制作图片文字排版预览效果附源码下载
2015/11/18 Javascript
javascript实现可键盘控制的抽奖系统
2016/03/10 Javascript
JSON 对象未定义错误的解决方法
2016/09/29 Javascript
jQuery实现倒计时重新发送短信验证码功能示例
2017/01/12 Javascript
JS从非数组对象转数组的方法小结
2018/03/26 Javascript
使用D3.js+Vue实现一个简单的柱形图
2018/08/05 Javascript
javascript异步编程的六种方式总结
2019/05/17 Javascript
微信小程序 冒泡事件原理解析
2019/09/27 Javascript
vue中实现点击按钮滚动到页面对应位置的方法(使用c3平滑属性实现)
2019/12/29 Javascript
Node中对非阻塞I/O、事件循环的知识点总结
2020/01/05 Javascript
Vue实现购物小球抛物线的方法实例
2020/11/22 Vue.js
python控制台英汉汉英电子词典
2020/04/23 Python
Pandas实现DataFrame按行求百分数(比例数)
2019/12/27 Python
python爬虫使用正则爬取网站的实现
2020/08/03 Python
pycharm 多行批量缩进和反向缩进快捷键介绍
2021/01/15 Python
非凡女性奢华谦虚风格:The Modist
2017/10/28 全球购物
美津浓美国官网:Mizuno美国
2018/08/07 全球购物
如何用PHP实现邮件发送
2012/12/26 面试题
Yahoo-PHP面试题4
2012/05/05 面试题
小学音乐教学反思
2014/02/05 职场文书
2014年乡镇植树节活动方案
2014/02/28 职场文书
不错的求职信范文
2014/07/20 职场文书
会议通知
2015/04/15 职场文书
2016党员学习《反对自由主义》心得体会
2016/01/22 职场文书
PHP策略模式写法
2021/04/01 PHP
Golang中channel的原理解读(推荐)
2021/10/16 Golang
yolov5返回坐标的方法实例
2022/03/17 Python
Go本地测试解耦任务拆解及沟通详解Go本地测试的思路沟通的重要性总结
2022/06/21 Golang
js面向对象编程OOP及函数式编程FP区别
2022/07/07 Javascript
nginx sticky实现基于cookie负载均衡示例详解
2022/12/24 Servers