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 相关文章推荐
javascript attachEvent绑定多个事件执行顺序问题
Oct 20 Javascript
基于Jquery的文字自动截取(提供源代码)
Aug 09 Javascript
css值转换成数值请抛弃parseInt
Oct 24 Javascript
Jquery通过Ajax方式来提交Form表单的具体实现
Nov 07 Javascript
jQuery中live()方法用法实例
Jan 19 Javascript
js滚动条平滑移动示例代码
Mar 29 Javascript
基于jQuery实现仿微博发布框字数提示
Jul 27 Javascript
Node.js 实现简单小说爬虫实例
Nov 18 Javascript
JavaScript30 一个月纯 JS 挑战中文指南(英文全集)
Jul 23 Javascript
angular.js实现购物车功能
Oct 23 Javascript
微信小程序实现点击效果
Jun 21 Javascript
vue-router之实现导航切换过渡动画效果
Oct 31 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
BBS(php &amp; mysql)完整版(二)
2006/10/09 PHP
php intval的测试代码发现问题
2008/07/27 PHP
php使用Jpgraph绘制3D饼状图的方法
2015/06/10 PHP
64位windows系统下安装Memcache缓存
2015/12/06 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
比较简单实用的使用正则三种版本的js去空格处理方法
2007/11/18 Javascript
JS定时刷新页面及跳转页面的方法
2013/07/04 Javascript
AngularJS教程 ng-style 指令简单示例
2016/08/03 Javascript
Angularjs中的ui-bootstrap的使用教程
2017/02/19 Javascript
详解vue.js+UEditor集成 [前后端分离项目]
2017/07/07 Javascript
Javascript实现跨域后台设置拦截的方法详解
2017/08/04 Javascript
微信小程序实现简单input正则表达式验证功能示例
2017/11/30 Javascript
在vue中使用jointjs的方法
2018/03/24 Javascript
每天学点Vue源码之vm.$mount挂载函数
2019/03/11 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
2020/07/15 Javascript
浅谈vue-props的default写不写有什么区别
2020/08/09 Javascript
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
2018/05/04 Python
TensorFlow打印tensor值的实现方法
2018/07/27 Python
python flask框架实现传数据到js的方法分析
2019/06/11 Python
解决python 读取excel时 日期变成数字并加.0的问题
2019/10/08 Python
python、PyTorch图像读取与numpy转换实例
2020/01/13 Python
django的模型类管理器——数据库操作的封装详解
2020/04/01 Python
python搜索算法原理及实例讲解
2020/11/18 Python
澳大利亚百货公司:David Jones
2018/02/08 全球购物
Java里面如何把一个Array数组转换成Collection, List
2013/07/26 面试题
C#基础面试题
2016/10/17 面试题
两道JAVA笔试题
2016/09/14 面试题
自动化专业个人求职信范文
2013/12/30 职场文书
经典大学生求职信范文
2014/01/06 职场文书
煤矿机修工岗位职责
2014/02/07 职场文书
销售团队获奖感言
2014/08/14 职场文书
公司法定代表人授权委托书
2014/09/29 职场文书
房产公证书
2015/01/23 职场文书
自信主题班会
2015/08/14 职场文书
奶茶店的创业计划书该怎么写?
2019/07/15 职场文书
使用CSS设置滚动条样式
2022/01/18 HTML / CSS