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 相关文章推荐
当鼠标移动到图片上时跟随鼠标显示放大的图片效果
Jun 06 Javascript
JQuery表格拖动调整列宽效果(自己动手写的)
Sep 01 Javascript
JS的location.href跳出框架打开新页面的方法
Sep 04 Javascript
15个非常实用的JavaScript代码片段
Dec 18 Javascript
js阻止移动端页面滚动的两种方法
Jan 25 Javascript
Vue单文件组件的如何使用方式介绍
Jul 28 Javascript
详解A标签中href=&quot;&quot;的几种用法
Aug 20 Javascript
详解vue-router数据加载与缓存使用总结
Oct 29 Javascript
jQuery实现表格的增、删、改操作示例
Jan 27 jQuery
微信小程序wxs实现吸顶效果
Jan 08 Javascript
vue实现购物车案例
May 30 Javascript
js利用iframe实现选项卡效果
Aug 09 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
Linux下CoreSeek及PHP扩展模块的安装
2012/09/23 PHP
php在线解压ZIP文件的方法
2014/12/30 PHP
使用YII2框架实现微信公众号中表单提交功能
2017/09/04 PHP
PHP使用PDO操作sqlite数据库应用案例
2019/03/07 PHP
laravel 解决路由除了根目录其他都404的问题
2019/10/18 PHP
一个简单的javascript类定义例子
2009/09/12 Javascript
jquery实现checkbox全选全不选的简单实例
2013/12/31 Javascript
js获取当前路径的简单示例代码
2014/01/08 Javascript
jquery退出each循环的写法
2014/02/26 Javascript
浅谈js键盘事件全面控制
2016/12/01 Javascript
利用js+css+html实现固定table的列头不动
2016/12/08 Javascript
js处理层级数据结构的方法小结
2017/01/17 Javascript
微信小程序  TLS 版本必须大于等于1.2问题解决
2017/02/22 Javascript
微信小程序 开发之滑块视图容器(swiper)详解及实例代码
2017/02/22 Javascript
ES6新特性三: Generator(生成器)函数详解
2017/04/21 Javascript
Vue中插入HTML代码的方法
2018/09/21 Javascript
Mint UI组件库CheckList使用及踩坑总结
2018/12/20 Javascript
js实现网页同时进行多个倒计时功能
2019/02/25 Javascript
vue路由对不同界面进行传参及跳转的总结
2019/04/20 Javascript
[02:16]DOTA2超级联赛专访Burning 逆袭需要抓住机会
2013/06/24 DOTA
[04:52]2015国际邀请赛LGD战队晋级之路
2015/08/14 DOTA
[04:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster 选手采访
2021/03/11 DOTA
Python程序设计入门(1)基本语法简介
2014/06/13 Python
Python面向对象之继承代码详解
2018/01/29 Python
Python学习笔记之变量、自定义函数用法示例
2019/05/28 Python
python3 配置logging日志类的操作
2020/04/08 Python
Origins加拿大官网:雅诗兰黛集团高端植物护肤品牌
2017/11/19 全球购物
英国领先的杂志订阅网站:Magazine.co.uk
2018/01/25 全球购物
英国第一职业高尔夫商店:Clickgolf.co.uk
2020/11/18 全球购物
2015学习委员工作总结范文
2015/04/03 职场文书
民间借贷借条范本
2015/05/25 职场文书
拯救大兵瑞恩观后感
2015/06/09 职场文书
Nginx 根据URL带的参数转发的实现
2021/04/01 Servers
Python字符串常规操作小结
2022/04/03 Python
Oracle 多表查询基本语法实例
2022/04/18 Oracle
app场景下uniapp的扫码记录
2022/07/23 Java/Android