【问题标题】:How to invalidate specific session at logout in Rails /w Devise?如何在 Rails / w 设计中注销时使特定会话无效?
【发布时间】:2013-07-22 02:19:27
【问题描述】:

我想在用户使用 Devise 注销时使会话无效,当用户注销时我有一个回调要捕获,以更好地防止会话劫持。

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

我的理解是,这会删除存储在服务器端的会话信息,从而使其无效。

但是,我仍然可以使用退出前获得的会话 ID 登录。 我误解了它是如何工作的吗?我只想使这个会话无效,而不是全部。

我正在使用 session_store 的默认值。

【问题讨论】:

  • 你从哪里得到session_id?另外,您还添加了哪些其他特定于会话的自定义代码?
  • 我的印象是 reset_session 不需要获取 session_id,我没有添加任何会影响会话值的自定义代码。

标签: ruby-on-rails session devise


【解决方案1】:

经过一番谷歌搜索和冥想,我来到了这个question,可以根据我的需要进行修改,

我所做的只是

application_controller.rb

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

这将使 sign_in_token 无效,从而使会话无效,因此劫持会话 id 仍然会使您被踢出。

【讨论】:

  • 我猜该方法已被删除。我看到这个错误:[8] pry(#)> current_user.update_attribute(:current_sign_in_token, "") NoMethodError: undefined method `current_sign_in_token=' for #<0x00007f8bf104b4e0>
猜你喜欢
  • 2012-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-21
  • 2015-01-04
  • 2012-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多