2016-12-13 5 views
0

ユーザーがパスワードを更新するときに、電話や別のブラウザなどのセッションをすべて無効にして、現在のデバイスに新しいセッションを1つ与えたいとします。 私はちょうど sign_out @user; sign_in @userを呼び出すとうまくいくようですが、うまくいくようです。パスワード変更後にすべてのユーザーセッションを終了する

しかし、Devise#sign_outおよびWarden#logoutメソッドの実際の実装を除いて、この主張をサポートするドキュメントは見つかりません。

文書化された解決策はありますか?

ありがとうございました!

答えて

0

Railsで新しいセッションを作成するには、reset_sessionを使用します。

In Railsセッションでは、セッション識別子が使用されます。セッション識別子は、サーバーおよびクライアントによってCookieとして保存されます。 reset_sessionは、(現在のユーザーの)識別子をサーバーから削除し、新しい識別子を発行します。既存のセッションストレージクッキーは、サーバーによって受け入れられず、sessionにデシリアライズされません。

the Rails guide article on securityは、セッションが実際にRailsでどのように動作するかについて、かなり良い説明があるので、私は読むことをお勧めします。

+0

ただし、Devise/Wardenは実際にこれを非常にうまく処理します。ワーデンはセッション識別子を取り消さない。むしろ、セッションからシリアル化されたユーザーを削除するだけです(ユーザーIDなど)。これにはユーザがサインインする必要があります。 – max

+0

デフォルトのCookieStoreセッションストレージメカニズムを使用している場合、すべてのデバイスからセッションを取り消す簡単な方法はありません。これは、セッションがその特定のデバイスによって保持されているセッション識別子にリンクされており、ストレージがそのデバイス上にあるためです。したがって、どのセッション識別子がユーザレコードにリンクされているかを知ることは不可能です。データベースストア/ memcachedを使用している場合は、データベースを照会してセッションを削除できます。 – max

+0

ありがとうございました! 'reset_session'は特定のユーザの他のセッションをすべて期限切れにしますか? –

関連する問題