欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

React从react-router路由上做登陆验证控制的方法

程序员文章站 2022-08-25 13:38:31
本文介绍了react从react-router路由上做登陆验证控制的方法,分享给大家,具体如下: 验证代码 import react from 'react...

本文介绍了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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。