设计超时工作,但不重定向

时间:2014-09-20 23:11:00

标签: ruby-on-rails devise timeout

我已设置:timeoutable并为我的开发环境和制作设置首选项。除非它没有重定向到登录页面,否则超时工作正常。为了测试,我将超时设置为10秒。

如果我登录,等待10秒,没有任何反应。如果我重新加载页面,它将加载相同的页面,但我不会登录。

1 个答案:

答案 0 :(得分:5)

过去,设计超时总是会重定向回到登录页面。但人们发现这令人困惑。这个想法是,如果用户在不需要登录的页面上,当超时发生时,应允许用户留在那里。 This customization是获得此行为的推荐方法。

默认超时行为被记录为Issue #1596中的错误,this commit进行了更改,以便超时会尝试保留在当前页面上。

发生超时时,timeoutable代码会抛出timeout消息,FailureApp类会使用redirect_url方法来决定重定向到哪里。如果您始终希望重定向到登录页面,则可以覆盖redirect_url方法:

config/initializers/devise.rb Devise.setup do |config| ... end块中设置这些行:

require "custom_failure_app"

config.warden do |manager|
  manager.failure_app = CustomFailureApp
end

使用以下代码在lib/custom_failure_app.rb创建一个新文件:

class CustomFailureApp < Devise::FailureApp
  def redirect_url
    scope_url  # Always redirect to signin page
  end
end

请注意,scope_path已更改为this commit中的scope_url。因此,根据您最近更新设计宝石的方式,您可能需要更改此设置。