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中单选框和复选框获取值的方式
Nov 06 Javascript
ExtJS Grid使用SimpleStore、多选框的方法
Nov 20 Javascript
jquery的ajax()函数传值中文乱码解决方法介绍
Nov 08 Javascript
JS的document.all函数使用示例
Dec 30 Javascript
在JavaScript中构建ArrayList示例代码
Sep 17 Javascript
angular中使用路由和$location切换视图
Jan 23 Javascript
JS创建事件的三种方法(实例代码)
May 12 Javascript
javascript的replace方法结合正则使用实例总结
Jun 16 Javascript
Bootstrap的fileinput插件实现多文件上传的方法
Sep 05 Javascript
使用clipboard.js实现复制功能的示例代码
Oct 16 Javascript
vue--点击当前增加class,其他删除class的方法
Sep 15 Javascript
vue element实现表格合并行数据
Nov 30 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与XML联手进行网站编程代码实例
2008/07/10 PHP
异步加载技术实现当滚动条到最底部的瀑布流效果
2014/09/16 PHP
PHP向浏览器输出内容的4个函数总结
2014/11/17 PHP
PHP strtotime函数用法、实现原理和源码分析
2015/02/04 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
JS连接SQL数据库与ACCESS数据库的方法实例
2013/11/21 Javascript
Node.js的特点和应用场景介绍
2014/11/04 Javascript
node.js中的events.emitter.removeAllListeners方法使用说明
2014/12/10 Javascript
js表头排序实现方法
2015/01/16 Javascript
jQuery实现购物车计算价格功能的方法
2015/03/25 Javascript
IE10中flexigrid无法显示数据的解决方法
2015/07/26 Javascript
字符串反转_JavaScript
2016/04/28 Javascript
jQueryUI中的datepicker使用方法详解
2016/05/25 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
2016/08/31 Javascript
Vue.js常用指令汇总(v-if、v-for等)
2016/11/03 Javascript
使用BootStrap建立响应式网页——通栏轮播图(carousel)
2016/12/21 Javascript
Bootstrap select实现下拉框多选效果
2016/12/23 Javascript
js实现轮播图的两种方式(构造函数、面向对象)
2017/09/30 Javascript
从parcel.js打包出错到选择nvm的全部过程
2018/01/23 Javascript
Vue ElementUi同时校验多个表单(巧用new promise)
2018/06/06 Javascript
如何在基于vue-cli的项目自定义打包环境
2018/11/10 Javascript
Vue组件Draggable实现拖拽功能
2018/12/01 Javascript
AngularJS实现的自定义过滤器简单示例
2019/02/02 Javascript
vue中 数字相加为字串转化为数值的例子
2019/11/07 Javascript
wxPython中listbox用法实例详解
2015/06/01 Python
python通过微信发送邮件实现电脑关机
2018/06/20 Python
Python pyinotify模块实现对文档的实时监控功能方法
2018/10/13 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
2020/02/26 Python
python dir函数快速掌握用法技巧
2020/12/09 Python
使用简单的CSS3属性实现炫酷读者墙效果
2014/01/08 HTML / CSS
美体小铺英国官网:The Body Shop英国
2017/01/24 全球购物
英国曼彻斯特宠物用品品牌:Bunty Pet Products
2019/07/27 全球购物
离婚协议书范本(2014版)
2014/09/28 职场文书
长江七号观后感
2015/06/11 职场文书
应收账款管理制度
2015/08/06 职场文书
windows server2008 开启端口的实现方法
2022/06/25 Servers