2012-03-30 13 views
8

Ruby on Railsアプリケーションでパスワード認証に「devise」を使用しています。ログインに成功してブラウザを閉じて新しいブラウザウィンドウを開くと、私はまだログインしています。私はChromeを使用していますが、私はすべてのChromeインスタンスを閉じてから新しいものを開きます。私はまだログインしています。IEとFirefoxも同様です。ブラウザでセッションを作成する方法をクリアするには?

私はウィンドウが閉じていると仮定し、新しいウィンドウを開くと、サーバーとブラウザの間に新しいセッションを確立する必要がありますか?もし私がそれを達成するにはどうすればいいですか?

私は、ブラウザウィンドウのonbeforeunloadイベントでログアウトボタンをクリックしようとしましたが、どのフォーム送信またはリンクをクリックしてもアプリケーションのログアウトとしては機能しません。

window.onbeforeunload = function() { 
    $('#logout_cls').click(); 
}; 

およびセッションコントローラにAJAX要求を送信しようとしたセッションをクリアするアクションを破壊します。

jQuery(window).bind(
    "close", 
    function(event) { 
      $.ajax({ 
      type: 'DELETE', 
      dataType: 'json', 
      url: $('#logout_cls').attr('href') 
      }); 
    }); 

しかし、これはすべて機能しませんでした。

答えて

2

これは実際に機能です。 Facebookとほぼすべての認証サイトでは、クッキーを使用してそれを行います。

DeviseのオプションRememberable "保存されたCookieからユーザーを覚えておくためのトークンの生成と消去を管理します"。あなたが望んでいない場合は、ユーザモデルからremember_token文字列とremember_created_at datetimeを削除し、ログインページからRemember Meボタンを削除してください。

+0

既に覚えやすい戦略が無効になっています。私のモデルは次のとおりです。devise:database_authenticatable、:recoverable、:trackable、:validatable 考えられますか? – user380692

+0

'db \ schema.rb'に行きます。ユーザーの表を確認してください。それは 'remember_created_at'または' remember_token'という属性を持っていますか?それがある場合は、それらを削除する必要があります。 – Ashitaka

+0

これを解決できましたか? – Ashitaka

6

問題は私のsession_storeがどのように設定されたかであることが分かります。

MyApp::Application.config.session_store :active_record_store, 
{:key => '_my_app_session', :secret => '5xb5x1g92e965b95b16e49x79gxx9999', :expire_after => 2.hours} 

私はオプションを削除し、問題は解決しました。

私は別の質問がありますが、これはオプションを削除すると潜在的な危険性がありますか?私は明らかにセッションに重要なデータを保存していませんが、公開したくないデータを入れています。

私のアプリは数日後に生きていきますが、これは非常に参考になります。私は何時間もの間、物事をgoogledしましたが、あまりにも多くの運を持っていませんでした。

ありがとうございました

+4

別の質問がある場合は、それを別の質問として投稿することをお勧めします。 –

関連する問題