栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用react-router-v4在路由上执行身份验证

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用react-router-v4在路由上执行身份验证

react-router v4
,你可以利用
render prop
Route
与生命周期方法一起更换
onEnter
功能存在于反应路由器V3。

查看此答案以获取更多详细信息:

react-router v4中的onEnter
prop

但是,由于您要做的只是在onEnter道具中进行身份验证,因此您可以轻松创建一个执行此操作的HOC

const RequireAuth = (Component) => {    return class App extends Component {        componentWillMount() {  const getToken = localStorage.getItem('token');  if(!getToken) {     this.props.history.replace({pathname: '/'});  }         }         render() { return <Component {...this.props} />         }    }}export { RequireAuth }

并像这样使用

<Route path={"/Dashboard"} component={RequireAuth(Dashboard)}/>

编辑:如果您需要进行网络呼叫以查找是否经过身份验证的使用,则可以将HOC编写为

 const RequireAuth = (Component) => {    return class App extends Component {         state = { isAuthenticated: false, isLoading: true        }        componentDidMount() { AuthCall().then(() => {     this.setState({isAuthenticated: true, isLoading: false}); }).catch(() => {     this.setState({isLoading: false}); })        }         render() { const { isAuthenticated, isLoading } = this.state;if(isLoading) {    return <div>Loading...</div>}if(!isAuthenticated) {    return <Redirect to="/login" />}return <Component {...this.props} />         }    }}export { RequireAuth }

更新:

除了HOC,您还可以选择

PrivateRoute
类似

const PrivateRoute = ({component: Component, isAuthenticated, isLoading, ...rest }) => { if(isLoading) {    return <div>Loading...</div>}if(!isAuthenticated) {    return <Redirect to="/login" />}return <Component {...this.props} />         }    } } export { PrivateRoute };

你可以像这样使用它

  class App extends Component {         state = { isAuthenticated: false, isLoading: true        }        componentDidMount() { AuthCall().then(() => {     this.setState({isAuthenticated: true, isLoading: false}); }).catch(() => {     this.setState({isLoading: false}); })        }         render() { <Router>   <div>       <Route exact path={"/"} component={Home} />       <Route path={"/SignUp"} component={SignUp} />       <Route path={"/SignIn"} component={SignIn} />       <PrivateRoute path={"/Dashboard"} component={Dashboard} isAuthenticated={this.state.isAuthenticated} isLoading={this.isLoading}/>    </div></Router>        }    }


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/608797.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号