首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于登录状态重定向到不同的组件

问基于登录状态重定向到不同的组件
EN

Stack Overflow用户
提问于 2018-04-20 08:55:48
回答 3查看 1.8K关注 0票数 0

我正试图解决反应路由器v4中的重定向问题.如果用户登录,我希望重定向到仪表板组件,如果我到达path="/“,则在用户注销时重定向到注册组件。

代码语言:javascript
复制
 <Switch>
   <Route exact path="/" component={Login} />    
   <PrivateRoute path="/dashboard" component={Dashboard}></PrivateRoute>
   <Redirect from='*' to='/404' />
 </Switch>

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-04-20 09:10:55

代码语言:javascript
复制
authenticate() {
    //do something to check if logged in
    if (loggedIn) {
         this.setState({ isAuth: true })
    }
}    

<Router>
    <Switch>
            <Route path="/" render={props => ( 
                <Login 
                auth={this.authenticate} 
                /> 
            )}/>
            {this.state.isAuth ?
                <Route path="/dashboard" component={Dashboard}/>
                />
            ) : <Redirect to='/' />}
    </Switch>
</Router>

然后在登录组件中执行如下操作:

代码语言:javascript
复制
<Link to="/dashboard"><button onClick={() => this.props.auth()}>Sign In</button></Link>
票数 1
EN

Stack Overflow用户

发布于 2018-04-20 09:09:56

如果我理解正确的话,这些案例是:

  1. 经过身份验证的用户访问登录页=>重定向到仪表板
  2. 未经身份验证的用户访问仪表板=>重定向到登录页面
  3. 未经身份验证的用户访问(或重定向到) 404 =>重定向到登录页面
  4. 未经身份验证的用户退出=>重定向到登录页面。

对于1,如果用户经过身份验证,请签入componentDidMount of login,如果是,请重定向到仪表板。

对于componentDidMount中的2和3,这一次如果用户没有经过身份验证,则重定向到登录。

对于4,在logout内部将用户重定向到login页面。

我不知道您是如何存储身份验证数据的,因此我无法提供确切的示例代码。

票数 1
EN

Stack Overflow用户

发布于 2018-04-20 09:12:31

您可以检查用户是否登录PrivateRoute,并根据此值重定向到"/login“页面或从道具返回组件。

PrivateRoute组件示例:

代码语言:javascript
复制
const mapStateToProps = createStructuredSelector({
    isLoggedIn: makeSelectIsLoggedIn(),
});

@connect(mapStateToProps)
export default class PrivateRoute extends React.Component {
    render() {
        const {isLoggedIn} = this.props;

        return isLoggedIn
            ? <AppLayout {...this.props}/>
            : <Redirect to={routePaths.LOGIN}/>;
    }
}

PublicRoute组件:

代码语言:javascript
复制
const mapStateToProps = createStructuredSelector({
    isLoggedIn: makeSelectIsLoggedIn(),
});

@connect(mapStateToProps)
export default class PublicRoute extends React.Component {
    render() {
        const {isLoggedIn} = this.props;

        return isLoggedIn
            ? <Redirect to={routePaths.DASHBOARD}/>
            : <AppLayout {...this.props}/>;
    }
}

和路线:

代码语言:javascript
复制
<Switch>
    <Route exact path={routePaths.ROOT} component={Login} />
    <PublicRoute path={routePaths.LOGIN} component={Login}/>
    <PrivateRoute path={routePaths.DASHBOARD} component={Dashboard}/>
    <Route component={NotFound}/>
</Switch>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49937808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档