2013-07-22 2 views
5

Я хочу аннулировать сеанс, когда пользователь выходит из системы с помощью Devise, у меня есть обратный вызов, чтобы поймать, когда пользователь выходит из системы, для большей защиты от захвата сеанса.Как аннулировать конкретный сеанс при выходе из системы в Rails/w Разработать?

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

Насколько я понимаю, это приведет к удалению информации о сеансе, хранящейся на стороне сервера, и поэтому ее недействительной.

Однако я все еще могу войти в систему, используя идентификатор сеанса, который я получил до выписки. Я не понимаю, как это работает? Я только хочу сделать недействительным только этот сеанс, не все из них.

Я использую значение по умолчанию для session_store.

+0

Откуда вы получаете 'session_id'? также, какой дополнительный специальный пользовательский код для сеанса вы добавили? – pungoyal

+0

У меня создалось впечатление, что reset_session не требует, чтобы session_id был получен, я не добавил никакого настраиваемого кода, который повлиял бы на значения сеанса. – Saifis

ответ

5

Через некоторое Googling и медитацией, я пришел APON этой question, который может быть изменен, чтобы соответствовать моим потребностям,

все, что я сделал

application_controller.rb

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

, который аннулирует sign_in_token, тем самым аннулируя сеанс, поэтому захват идентификатора сеанса все равно вас вышвырнет.

Смежные вопросы