我有以下应用程序控制器。我最近在授权部分之前添加了我想要执行的set_customer。 prepend_before_action 完美地做到了。但是,只要我添加该行,就会收到此错误:无法验证CSRF令牌的真实性
current_user不是nil,所以当我调试它时,它会直接进入set_customer部分并直接进入authorize方法。当我删除 prepend_before_action 行时,它会再次运行。我该如何解决这个问题(当然要保持CSRF保护。
也许重要提一下:我也在使用设计。错误来自 Devise :: SessionsController #create
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception, prepend: true
before_action :authorize
prepend_before_action :authorize, :set_customer
def authorize
if current_permission.allow?(params[:controller], params[:action], current_resource)
current_permission.permit_params! params
else
raise Permission::NotAuthorized
end
end
def set_customer
if current_user.nil?
# some unimportant code since current_user isn't nil
end
end
答案 0 :(得分:0)
您是否尝试过移动protect_from_forgery
prepend_before_action
以下?关于CSRF错误的Devise GitHub的一个建议是改变你调用它们的顺序,或者在p_f_p中添加prepend。根据我的理解,prepend将前置的东西设置为索引0.这将在执行p_f_p调用之前进行授权调用。