2017-12-06 9 views
0

を反応させ、PassportJS PassportJSベースのログイン認証と登録認証が正常にセットアップされました。私のアプリのすべてのページは保護されたルートです - ログインしているユーザーだけが見ることができます。認証ルートは、私は、次のスタックを使用しています

私の質問は、各ルートについて、ユーザーが現在ログインしているかどうかを確認する方法です。私はエクスプレスセッションはサーバー側のセッション管理を提供することを理解していますが、現在のユーザーのセッションが存在するかどうかを確認するために、各ページのロード時にバックエンドにAPIリクエストを行うことを回避する方法があるのだろうかと思います。

マイApp.jsファイル:

import React, { Component } from 'react'; 
import './App.css'; 
import { BrowserRouter, Route, Switch, Link } from 'react-router-dom'; 
import AsyncAuthPage from 'components/AsyncAuthPage/index.js' 

const NoMatch =() => (
    <p>Path not found</p> 
); 

const HomePage =() => (
    <div>WELCOME!</div> 
); 


class App extends Component { 
    render() { 
    return (
     <div className="App "> 
     <BrowserRouter> 
     <Switch> 
      <Route path="/login" component = {AsyncAuthPage} /> 
      <Route path="/home" component = {HomePage} /> 
      <Route path="*" component={NoMatch} />   
     </Switch> 
     </BrowserRouter> 
     </div> 
    ); 
    } 
} 

export default App; 

AsyncAuthPageコンポーネントが実装するPassportJSベースの認証。上記のサンプルでは、​​ホームページルートを認証で保護したいと思います。これはどうすればできますか?ユーザーが正常にログインした後、次のように世話をする必要があります

  • App.jsは、そのログインを知っている必要がある親は
  • 成功したすべてのページはのAPI呼び出しを避けるようにしてください現在のユーザーがログインしているかどうかを確認するために、可能な限り( componentDidMountまたはページのロードの)バックエンド、。
  • はページで動作するはずですsuccessifulログイン後のlocalStorageであまりに
+0

ログに記録するかどうかにかかわらず、ブール値をReduxに保存することができます。したがって、基本的には、彼がログに記録されているかどうかを確認するためにapi呼び出しを行う別のコンポーネントが必要で、それをreduxストアに置き、すべてのページをreduxに接続して値をチェックします。 – Coldblue

+0

@Coldblue reduxのブール値はメモリに格納されます。ページをリロードすると、私は状態を失うでしょう。どのように値を維持するか? – Ninja

+1

あなたがリフレッシュ時に状態を失うことは確かですが、componentWillMountでそのアクションを呼び出すと、コンポーネントがマウントされるたびにログオンしているかどうかを確認するためにAPI呼び出しを行うことができます。 – Coldblue

答えて

-1

ストアの資格情報を再ロード、アプリの負荷資格あなたの州で始まります/ redux、あなたのAPIからエラー401(権限のない)が得られたら、必要に応じて認証情報を無効にしてください。

+0

localStorageの使用に関するいくつかのセキュリティ問題があるかもしれないので、localStorageの使用を避けたいと思います。私は代わりにクッキーを使用しています。 – Ninja

+0

クッキーも良いです! –

関連する問題