我最近把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
值传递的是整数而不是字符串?
1条答案
按热度按时间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