このRailsアプリがherokuでホストされている謎のポイントXで、ログインしたユーザーが突然別のユーザーとしてログインすることになります。認証にはdevise gemを使用しています。
これは、私たちが知っている2人のユーザーに対して発生しています。現在、この問題の根本的な原因を突き止めています。
今私がしなければならないのは、ユーザーに再度ログインさせるために、すべてのデバイスセッションを無効にすることです。ユーザーがログインした後、問題は解消したようです。
Secret_tokenをリセットしてみましたが、再度ログインする必要はありませんでした。次に、私は自分のWebダイノを縮小してから、再び拡大しました。アプリも再起動しました。セッションをリセットするために、secret_tokenの変更を取得しようとするすべてのユーザー。
他のアイデアはありますか?
セッションをCookieに保存している場合(デフォルト)、session_tokenの変更は機能します。
しかし、active_recordに保存している場合は、次の方法ですべてのセッションを削除できます。
rake db:sessions:clear
次に:BAM!これ以上のセッションはありません。
セッションCookie名を変更して、config/initializers/session_store.rbにあるすべてのセッションを無効にできるはずです。
YourApp::Application.config.session_store :cookie_store, key: '_change_me_session'
セッションに他の重要な情報が保存されていない場合は、セッションをクリアできます。
rake db:sessions:clear
受け入れられた回答を更新しました、今です
rake tmp:clear
rake -T ... rake tmp:create # Creates tmp directories for sessions, cache, sockets, and pids
Deviseには timeoutable と呼ばれるものがあります。これで作業できますか?
チェックアウト
module ClassMethods
Devise::Models.config(self, :timeout_in)
end
私はあなたが次のようなことをできると思っています:
User.all.each do |user|
user.timeout_in 1.second
end
しかし、これが新しいセッションのみを管理しているかどうか、そして既存のセッションを管理しているかどうかはわかりません。
実際、これは非常に複雑です。ただ試してください:
User.all.each do |user|
sign_out user
end
この投稿を参照 Deviseですべてのユーザーをログアウト
コンソールからこのようなことを行うには、この例を確認して必要に応じて調整する必要があります
Railsコンソール? からDeviseを使用してユーザーをサインインする方法==
Cookieストアを使用する場合、Cookieの暗号化に使用されるアプリsecret_tokenを再生成する必要があります。
secret_tokenを構成するファイル:config/initializers/secret_token.rb
bundle exec rake secret
新しい秘密トークンを生成するために使用できます。
https://www.tigraine.at/2012/08/03/how-to-expire-all-active-sessions-in-Rails-
すべてのアクティブなユーザーまたはスコープをサインアウトします。このヘルパーは、ワンクリックですべてのロールをサインアウトするのに役立ちます。これは監視員のすべてのスコープをサインアウトします。少なくとも1つのログアウトがあった場合はtrueを返し、すべてのスコープにログインしているユーザーがいない場合はfalseを返します。
ソース: http://www.rubydoc.info/github/plataformatec/devise/Devise/Controllers/SignInOut