设计 - 尝试在会话超时时重定向到登录页面

时间:2016-02-11 15:52:55

标签: ruby-on-rails session devise

我正在尝试按照其他堆栈溢出帖子的建议,但没有任何运气。

现在当用户会话超时且用户尝试与页面交互时,我在控制台中收到两个401 Unauthorized错误。我希望它改为重定向到登录页面。

我发现我可以创建自己的自定义失败应用程序,并覆盖redirect_url以使其始终重定向。这就是我所拥有的:

在/config/initializers/devise.rb

需要“custom_timeout_redirect”

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

在custom_timeout_redirect.rb中:

class CustomTimeoutRedirect < Devise::FailureApp
   def redirect_url
      puts 'TRYING TO REDIRECT TO THE HOMEPAAAAAAAAAAAAAAAAAAGE'
      puts scope_url
      scope_url
   end

会话超时时不运行此代码。更重要的是,我也试图覆盖重定向方法,似乎它也没有在会话超时时被调用。

有人可以引导我朝着正确的方向前进吗?我已经在网上阅读了这个问题的解决方案,足以让我觉得我只是在愚蠢。

谢谢!

1 个答案:

答案 0 :(得分:1)

为了让用户重定向到登录。我相信您应该使用Timeoutable代替http://www.rubydoc.info/github/plataformatec/devise/master/Devise/Models/Timeoutable

在config / initializers / devise.rb config.timeout_in = 30.minutes

中注释掉这一行

如果要定义自定义超时持续时间,可以执行以下操作:

https://github.com/plataformatec/devise/wiki/How-To:-Add-timeout_in-value-dynamically

class User < ActiveRecord::Base
  devise (...), :timeoutable

  def timeout_in
    if self.admin? 
      1.year
    else
      2.days
    end
  end
end

希望它有所帮助!