2013-07-22 14 views
5

Chcę unieważnić sesję, gdy użytkownik wylogowuje się przy użyciu narzędzia Devise, mam wywołanie zwrotne do przechwytywania, gdy użytkownik się wylogowuje, w celu zwiększenia ochrony przed przejęciem sesji.Jak unieważnić określoną sesję przy wylogowywaniu w Rails/w Devise?

class ApplicationController < ActionController::Base 
    def sign_out(*args) 
    super(*args) 
    reset_session 
    end 
end 

Rozumiem, że spowodowałoby to usunięcie informacji o sesji przechowywanych po stronie serwera, a zatem ich unieważnienie.

Jednak nadal mogę się zalogować, używając identyfikatora sesji, który otrzymałem przed wylogowaniem. Czy nie rozumiem, jak to działa? Chcę tylko unieważnić tylko tę sesję, nie wszystkie.

Używam domyślnego dla session_store.

+0

skąd otrzymujesz 'session_id'? także jaki inny niestandardowy kod niestandardowy został dodany? – pungoyal

+0

Byłem pod wrażeniem, że reset_session nie wymagało nabycia identyfikatora session_id, nie dodałem żadnego niestandardowego kodu, który wpłynąłby na wartości sesji. – Saifis

Odpowiedz

5

Po pewnym googling i rozważanie, doszedłem apon tym question, które mogą być zmienione, aby dopasować do moich potrzeb,

wszystko zrobiłem było

application_controller.rb

def sign_out(*args) 
    current_user.update_attribute(:current_sign_in_token, "") 
    super 
    end 

który unieważnia the sign_in_token, tym samym unieważniając sesję, więc przejmowanie identyfikatora sesji spowoduje, że zostaniesz wyrzucony.

Powiązane problemy