上下文
我正在使用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这对我来说......这就是我现在所处的位置。)