zoukankan      html  css  js  c++  java
  • React route v4路由鉴权

    React route v4中没有vue的beforeEach的功能,可以用以下两种思路,来做路由鉴权:

    1. Route组件的render中鉴权

    定义AuthRoute组件

    import React from 'react'
    import PropTypes from 'prop-types'
    import { Route, Redirect } from 'react-router-dom'
    
    const AuthRoute = ({ component: Component, authenticated, redirectTo, ...rest}) => {
      return (
        <Route
          {...rest}
          render={props => (
            authenticated ? (
              <Component {...props} />
            ) : (
              <Redirect to={{
                pathname: redirectTo,
                state: { from: props.location }  
              }}
              />
            )
          )}
        />
      )
    }
    
    AuthRoute.propTypes = {
      authenticated: PropTypes.bool,
      redirectTo: PropTypes.string.isRequired,
      component: PropTypes.func.isRequired,
    }
    
    AuthRoute.defaultProps = {
      authenticated: false,
    }
    
    export default AuthRoute

    使用AuthRoute组件

    import React, { Component } from 'react'
    import { AuthRoute } from 'react-router-auth'
    import UserProfile from './UserProfile'
    
    class Example extends Component {
      render () {
        return (
          <AuthRoute path="/profile" component={UserProfile} redirectTo="/login" authenticated={this.props.authenticated} />
        )
      }
    }

    类似实现的线上demo

    auth-workflow

    2. history的listen方法中鉴权

    // 加入对history的监听
    this.props.history.listen((location, action) => {
      // 执行内容, 第一个参数是当前的location, 第二个是此次执行的动作
      console.log(action, location.pathname, location.state)
    })

    要使用React router提供的history对象,可以从props中取到,不要使用自己定义的history对象,否则,监听Link跳转无效

    参考:https://github.com/joelseq/react-router-auth

             https://reactrouter.com/web/example/auth-workflow

             https://www.zhihu.com/question/66731068

  • 相关阅读:
    【原】git常见用法
    【转】EDID的简介和解析
    rsa公钥和私钥的生成
    往redis中存储数据是利用pipeline方法
    对于接口文档个的说明内容包括哪些
    blueprint的使用
    flask中如何生成迁移文件
    flask中自定义过滤器
    jsonify
    flask自定义处理错误方法
  • 原文地址:https://www.cnblogs.com/mengff/p/13594977.html
Copyright © 2011-2022 走看看