2012-03-30 4 views
8

Ich verwende "devise" für die Passwort-Authentifizierung in meiner Ruby on Rails App. Sobald ich mich erfolgreich angemeldet habe und ich meinen Browser geschlossen habe und ein neues Browserfenster geöffnet habe, bin ich immer noch angemeldet. Nehmen wir an, ich verwende Chrome, schließe alle Instanzen von Chrome und öffne dann eine neue. Ich bin immer noch angemeldet. Das gleiche gilt für IE und Firefox.Wie kann ich die Sitzung im Browser schließen?

Ich würde annehmen, am Ende des Fensters und das Öffnen eines neuen Fensters sollte eine neue Sitzung zwischen dem Server und dem Browser einrichten, nicht wahr? Wenn nicht, wie erreiche ich das?

Ich versuchte versucht, klicken Sie auf Abmelden-Schaltfläche im Browserfenster onbeforeunload Ereignis, aber es funktioniert nicht, wie es aus der Anwendung auf einem Formular senden oder Link klicken.

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

und versuchte AJAX Anfrage an den Sitzungen Controller sendet zerstören Aktion für die Sitzung löschen.

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

aber all dies hat nicht funktioniert.

Antwort

2

Das ist eigentlich eine Funktion. Facebook und so ziemlich alle Seiten mit Authentifizierung tun dies durch die Verwendung von Cookies.

Devise Option Rememberable "verwaltet das Generieren und Löschen eines Tokens zum Erinnern an den Benutzer aus einem gespeicherten Cookie". Wenn Sie das nicht möchten, entfernen Sie die remember_token Zeichenfolge und remember_created_at Datetime von Ihrem Benutzermodell und entfernen Sie die Remember Me Schaltfläche von Ihrer Anmeldeseite.

+0

Ich habe bereits die Erinnerung-Strategie deaktiviert. Hier ist, wie mein Modell ist: devise: database_authenticatable,: wiederherstellbar,: verfolgbar,: validable Gedanken? – user380692

+0

Gehen Sie zu 'db \ schema.rb'. Überprüfen Sie Ihre Benutzertabellen. Hat es ein Attribut mit dem Namen 'remember_created_at' oder' remember_token'? Wenn dies der Fall ist, müssen Sie sie entfernen. – Ashitaka

+0

Haben Sie das geschafft? – Ashitaka

6

Es stellte sich heraus, dass das Problem war, wie mein session_store konfiguriert wurde.

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

Ich entfernte die Optionen und das Problem wurde behoben.

Ich habe noch eine andere Frage und das Entfernen von Optionen hat es mögliche Risiken? Ich speichere offensichtlich keine wichtigen Daten in der Sitzung, sondern stelle Daten bereit, die ich nicht offen legen möchte.

Meine App würde in ein paar Tagen live gehen, es wäre sehr hilfreich, eine Antwort dafür zu bekommen. Ich habe ungefähr eine Stunde lang gegoogelt, hatte aber nicht viel Glück.

Dank

+4

Wenn Sie eine andere Frage haben, sollten Sie es wahrscheinlich als separate Frage (vielleicht mit einem Link zu diesem) posten. –

Verwandte Themen