2017-08-29 18 views
1

私は、バックエンドとしてAPIを提供するためにexpress + mongodb + redis + mongooseをバックエンドとして使用します。ページがリロードされたときにフロントエンドでユーザーのログイン状態が失われる

そして、フロントエンドにreact + react-router + reduxを使用してください。

認証はsessionId + cookieに基づいています。

フロントエンドの場合は、react-routeronEnterフックを使用して認証制御します。ユーザーが正常にログインすると、バックエンドのユーザー情報がreduxストアに保存されます。このように:

const auth = { username: 'novaline', isLogin: true}; 

これまでのところすべて問題ありません。

問題は:ユーザーがページをリロードすると、レビュックスストアにキャッシュされたデータが消去されます。ええ、私は知っている、還元店のライフサイクルがあります。

しかし、ユーザーが&にログインすると、ページをリロードすると、認証データがレデックスストアから消去されるため、フロントエンドはユーザー情報を失います。

ユーザー名は未定義で、onEnterフックのため、loginページにリダイレクトされます。

バックエンドの場合、sessionはまだredisです。

私はjwtがこの問題を解決できることを知っています。

私の場合は。ユーザーがページをリロードすると、ユーザーのログイン状態を保持するにはどうすればよいですか?

P.S.私はcookiehttpOnlyMax-Ageと設定しました。クライアントはcookieを取得または設定できません。

__update:__

私はのlocalStorageにユーザー情報を保存しよう。ユーザがloginedときに、ページをリロードし、真の場合は、ユーザーのlocalStorageで情報かどうかは、私はこのような認証データをリセットする場合、私は確認してください。

const auth = {username: localStorage.getItem('username'), isLogin: true};

だから、私は実装するためにこれを使用することができます自動ログインし、homeページにリダイレクトします。

しかし、私はそれが信頼できないと思います。ユーザーはlocalStorageを変更できます。したがって、ユーザーがlocalStorageをクリアした場合。ユーザー情報とログイン状態も表示されます。

+0

この情報をローカルストレージに保存すると、永続性が維持されます。それを試した? –

+0

@BoyWithSilverWingsええ。私は私の質問を更新する。返信ありがとう。 – novaline

+0

ローカルストレージの変更は、最小の関心事でなければなりません。 これを確認してください。 https://stackoverflow.com/questions/11246947/can-localstorage-be-modified-by-a-client – keshavDulal

答えて

1

localstorageをログイン情報の保存に使用することは安全ではないため、良い方法ではありません。

  1. あなたはあなたのアプリケーションの負荷は、ユーザーがログインを取得したときにそれ以外のAPI呼び出しを作るクッキーがクライアント側で読み取ることを可能にすると、あなたの再来ストアがINITSたときにクッキーから情報をログインフェッチ、

  2. どちらかサーバーからのステータス。

2番目の方法をお勧めします。

+0

お返事ありがとうございます。あなたのお勧めの方法を試してみます。できます。これはSPAの 'sessionId' +' cookie'に基づく認証のための最良のアイデアですか? – novaline

+0

@novalineうまくいきました。それぞれの方法には賛否両論があり、apiはあなたのpwaにオンラインでの作業を要求します。したがって、オフラインで作業する必要がある場合は、別の方法(おそらく最初の方法)が必要になります。 – Fawaz

関連する問題