私はリアクションルートを認証するためのチュートリアルに従っています。authenticated
がtrueの場合、ユーザーはルートにアクセスできるようになりました。リアクションの複数の役割のためのルートの認証
routes.js
import React from 'react';
import { Route, IndexRoute,Redirect } from 'react-router';
import App from './app';
import requireAuth from '../Authentication/require_authentication';
import Dashboard from '../Dashboard';
import Managers from '../Managers';
import Guests from '../Guests';
import Login from '../Login';
export default (
<Route path="/" component={App}>
<IndexRoute component={requireAuth(Dashboard)} />
<Route path="dashboard" component={requireAuth(Dashboard)} />
<Route path="advertisers" component={requireAuth(Managers)} />
<Route path="properties" component={requireAuth(Guests)}/>
<Route path="login" component={Login} />
</Route>
);
require_authentication.js
/*HIGHER ORDER COMPONENT */
import React, { Component } from 'react';
import { connect } from 'react-redux';
export default function(ComposedComponent) {
class Authentication extends Component {
static contextTypes = {
router: React.PropTypes.object
}
componentWillMount() {
if (!this.props.authenticated) {
this.context.router.push('/login');
}
}
componentWillUpdate(nextProps) {
if (!nextProps.authenticated) {
this.context.router.push('/login');
}
}
render() {
return <ComposedComponent {...this.props} />
}
}
function mapStateToProps(state) {
return { authenticated: state.auth.authenticated };
}
return connect(mapStateToProps)(Authentication);
}
彼らユーザーがログインがのlocalStorageでの状態としてこれを持っている:
userId: 1,
userName:"Bob",
roleName:"Manager"
私はまだです作成されたコンポーネントはかなり新しくなっていますが、認証するだけでなく特定のルートにアクセスすることからの役割例えば。マネージャはマネージャルートとダッシュボードのみを表示できます。ゲストにはダッシュボードとゲストしか表示されません。
私が探していたものです。ありがとう! – lost9123193
喜んで助けてください!この機能はかなり標準的なので、既存のパッケージをチェックアウトすることをお勧めします。例えば: 'redux-auth-wrapper'(https://github.com/mjrussell/redux-auth-wrapper)は非常に似た考えを持っているようです。 –
'/' pathに関するあなたの質問に関して、ルータの 'isActive'メソッドは正確なパスにマッチするようにする第2パラメータを受け取ります。だから、 'router.isActive( '/'、true)'を使ってインデックスコンポーネントへのアクセスをチェックしてみてください。 –