ruby last_request_at值在设备中作为整数传递

c3frrgcw  于 2023-03-08  发布在  Ruby
关注(0)|答案(1)|浏览(106)

我最近把rails应用的ruby版本升级到了2.6,但我遇到了一个devise错误,当使用warden进行身份验证时,last_request_at的值作为字符串传递。

warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#failure")

由于这一点,我面临着一个argument out of range错误。
以下是last_request_at的值,该值将传递给warden

"warden.user.user.session" => {"last_request_at" => "1677703463"}

时间应为整数而非字符串。
以下是deviegem中导致错误的代码,该代码位于devise/lib/devise/hooks/timeoutable.rb中:

if last_request_at.is_a? Integer
  last_request_at = Time.at(last_request_at).utc
elsif last_request_at.is_a? String
  last_request_at = Time.parse(last_request_at)
end

Time.parse无法解析字符串,但当值为整数时可以工作。
有没有办法确保last_request_at值传递的是整数而不是字符串?

9nvpjoqh

9nvpjoqh1#

我遇到了同样的问题,在我的情况下,这是因为旧的cookie_store.rb文件,旧的cookie_store将action_dispach cookie附加到参数中,然后将其与请求沿着转换为字符串。
从此处更新您的cookie_store.rb文件-适用于rails 5.2 -https://github.com/rails/rails/blob/5-2-stable/actionpack/lib/action_dispatch/middleware/session/cookie_store.rb

相关问题