Rails before_action:authenticate_user!不重定向

时间:2015-07-16 21:56:55

标签: ruby-on-rails ruby-on-rails-4 redirect devise http-status-code-401

上下文

我正在使用Devise进行身份验证。我试图测试用户登录后打开多个窗口的行为,然后他们从一个窗口注销,但尝试对需要身份验证的另一个窗口进行更改。当他们提交表单时,它不应该POST / PUT / DELETE,而应该重定向到登录页面,并显示他们需要登录的消息。根据我发布的其他SO问题:Catch 401 error in Rails with Devise when user has multiple windows open,我已经了解到Devise的帮助方法:before_action :authenticate_user!将代表我处理重定向。哪个好极了!

所以我有以下控制器:

class StaticpagesController < ApplicationController
  prepend_before_action :authenticate_user!, only: [:dashboard]

  def dashboard
end

class PlansController < ApplicationController
  prepend_before_action :authenticate_user!

  def create
  def update
  def destroy
  ...
end

我可以在控制台和本地服务器中确认authenticate_user!实际上是两个控制器中的第一个过滤器

puts self._process_action_callbacks.select { |c| c.kind == :before }.map(&:filter)

问题

问题是它似乎只在我的StaticpagesController dashboard行动中起作用。现在可能只是因为在/dashboard我唯一可以做的测试就是页面刷新,不采取任何操作(因为所有表单操作都转到PlansController),但现在是行为:

  • 如果我打开了两个/dashboard个页面,请在另一个页面上退出并刷新另一个页面,然后在后者上重定向到登录页面,并提示登录
  • 如果我打开了两个/dashboard个页面,请在另一个页面上注销,并尝试在另一个页面上提交表单(仪表板设计为单页面应用程序,因此表单存在于加载中),然后是比重定向,我得到一个我没有登录的纯文本错误(和一个401响应)

鉴于此,我怀疑:

  • authenticate_user!不负责重定向,还有其他内容(在这种情况下告诉我什么!)
  • authenticate_user!仅在一个控制器中完美运行

请帮忙!我想确保用户始终重定向...

顺便说一句,顺便说一句,我试图自己动手,抓住401和重定向,但卡住了(这是我上面提到的原始问题,有人评论说我不应该这样做,因为Devise这对我来说......这就是我现在所处的位置。)

0 个答案:

没有答案