2013-07-22 19 views
5

Tôi muốn vô hiệu hóa phiên khi người dùng đăng xuất bằng Devise, tôi có một cuộc gọi lại để bắt khi người dùng đăng xuất, để bảo vệ nhiều hơn chống lại việc chiếm đoạt phiên.Làm thế nào để vô hiệu hóa phiên cụ thể khi đăng xuất trong Rails/w Devise?

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

Tôi hiểu rằng điều này sẽ xóa thông tin phiên được lưu trữ ở phía máy chủ, do đó làm mất hiệu lực.

Tuy nhiên tôi vẫn có thể đăng nhập bằng id phiên tôi nhận được trước khi đăng xuất. Tôi có hiểu lầm về cách hoạt động của nó không? Tôi chỉ muốn vô hiệu hóa phiên này, không phải tất cả chúng.

Tôi đang sử dụng mặc định cho session_store.

+0

bạn nhận 'session_id' từ đâu? Ngoài ra, bạn đã thêm mã tùy chỉnh cụ thể của phiên nào khác? – pungoyal

+0

Tôi đã được ấn tượng rằng reset_session không yêu cầu session_id được mua lại, tôi chưa thêm bất kỳ mã tùy chỉnh nào có thể ảnh hưởng đến giá trị phiên. – Saifis

Trả lời

5

Sau khi một số googling và thiền, tôi đến apon question này, mà có thể được sửa đổi để phù hợp với nhu cầu của tôi,

tất cả tôi đã làm là

application_controller.rb

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

đó sẽ làm mất hiệu lực sign_in_token, do đó làm mất hiệu lực phiên, vì vậy việc chiếm đoạt id phiên sẽ vẫn khiến bạn bị loại bỏ.