[英]Javascript React redirect if session variable is set
我正在使用反应。 我有一个登录页面,如果变量设置为true,我不希望用户访问该页面。
用户登录并将变量设置为true后,我正在使用sessionStorage:
sessionStorage.setItem('loggedin', 'true');
我的问题是用户仍然可以访问登录页面。
如果登录设置为true,如何禁止访问此页面?
这是我当前的应用程序组件:
class App extends React.Component {
render() {
return (
<Router>
<div>
<Nav />
<Route exact path="/" component={Home} />
<Route exact path="/contact" component={contact} />
<Route path="/login" component={Login} />
</div>
</Router>
)
}
在主要组件( <App/>
)中,将逻辑代码放入ComponentWillMount()
或constructor
以检查loggedIn
状态,然后将其放入render()
条件以呈现或不呈现页面。
UPDATE:要停止谁登录后才能访问人login
页面,更新我的答案是:在LoginComponent
检查loggedIn
,不要重定向到根。 在我的示例中,路由器是ReactRouter
。
例如:
Class LoginComponent extends React.Components {
constructor(props) {
super(props);
this.loggedIn = sessionStorage.getItem('loggedin') === 'true';
}
render() {
// my example using reactRouter
if(!this.loggedIn) {
return <Redirect to='/'/>;
}
return (<div>Your Login content</div>)
}
}
您可以将onEnter
函数传递给Route
Component,当用户点击相应的URL时将调用该函数。 只需在此处检查该用户已登录即可。 如果他已loggedin
并想转到“登录”组件,则只需重定向到您的“ Home
组件,否则就可以。
export function onEnter(nextState, transition, callback) {
const { pathname } = nextState.location
const isLoggedIn = sessionStorage.getItem('loggedin') === 'true'
if (pathname === '/login' && isLoggedIn) {
transition('/') //redirect to Home component
}
return callback() // go as it is.
}
class App extends React.Component {
render() {
return (
<Router>
<div>
<Nav />
<Route exact path="/" component={Home} onEnter={onEnter}/>
<Route exact path="/contact" component={contact} onEnter={onEnter}/>
<Route path="/login" component={Login} onEnter={onEnter}/>
</div>
</Router>
)
}
}
注意:我已经在React Router 3.0版中测试过更高版本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.