2016-09-08 18 views
2

私は、コンテキスト内にあるユーザー権限レベルに基づいて、どのルートを使用できるかを制御する方法を探しています。反応ルータでは、ルートのonEnterプロップからコンテキストにアクセスできますか?

私はa nice exampleを見つけましたが、ユーザの認証状態を保存するためにlocalStorageに依存しています。私はすべてを「状態」に保つことを好むだろう。 私はしばらく遊んでいましたが、のonEnter()小道に文脈を渡すことはできません。私の最も近い解決策はひどくハッキリに見えており、私はリアクションルータがコンテキストを認識することが悪い戦略であると考え始めています。

例がありますか?コンテキストに基づいてルータが決定を下すべきでないことを確認できますか?

おかげ

編集:私は反応し、ルータを例に指摘されており、それは有望に見える:https://github.com/reactjs/react-router/tree/master/examples

+1

私は反応ルータを使用しており、ユーザーは認証とアクセスレベルに基づいて異なるルートにアクセスできるようにonEnterを使用しています。これは素晴らしいです。私は通常、このonEnter = {RouterMiddleware.authenticatedUsersOnly} 'を実行し、ストアを渡す必要がある場合、この' onEnter = {(nextState、replace)=> {RouterMiddleware.loginLevel(nextState、replace、store)}}を使用します。 } ' 反応ルータ文書を見て、そのミドルウェアでコンテキストにアクセスできるかどうか、どのようにアクセスできるかを確認できます。 *ユーザーの要求を処理する際に、認証+権限レベルのサーバー側を処理することを忘れないでください。 –

答えて

1

localStorageはかなり信頼性の高いですが、それはサポートされないことがありますか、ユーザーがそれを削除することができます。

私は、あなたが簡単にコードは次のようになり、アプリケーションのstateにアクセスすることができ、代わりにredux & react-reduxを使用するためにあなたをお勧めします。またreduxあなたはreactアプリケーションを拡張できます

const Root = ({ store }) => (

    function authenticateUser(nextState, replaceState, callback) { 
    const state = store.getState() 
    // do your thing - forbid, grant access etc... 
    } 

    <Provider store={store}> 
    <Router> 
     <Route path="/" component={App} onEnter={authenticateUser} /> 
    </Router> 
    </Provider> 
); 

。最初はreduxを理解するのは少し難しく圧倒されるかもしれませんが、それは大丈夫です。その努力は十分に価値があり、報われるからです。

関連する問題