使用prepend_before_action时无法验证CSRF令牌的真实性

时间:2018-02-13 00:26:41

标签: ruby-on-rails

我有以下应用程序控制器。我最近在授权部分之前添加了我想要执行的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

1 个答案:

答案 0 :(得分:0)

您是否尝试过移动protect_from_forgery prepend_before_action以下?关于CSRF错误的Devise GitHub的一个建议是改变你调用它们的顺序,或者在p_f_p中添加prepend。根据我的理解,prepend将前置的东西设置为索引0.这将在执行p_f_p调用之前进行授权调用。