4

我正在尝试为我的 Rails 应用程序构建 JSON API,并编写了以下方法:

  def create
    organization = Organization.find(params[:organization][:node_id])
    node = organization.nodes.build(nodes_params.except[:id])
    if node.save
      render json: node, status: :ok
    else
      render json: node, status: :bad_request
    end
  end

在 Postman 中尝试该方法返回错误:“无法验证 CSRF 令牌真实性”。基于这篇文章,我将以下代码添加到基本控制器中。不幸的是,这没有任何区别。有谁了解错误的原因?

protect_from_forgery
skip_before_action :verify_authenticity_token, if: :json_request?
private
  def json_request?
    request.format.json?
  end
4

1 回答 1

5

根据评论application_controller.rb你需要把这一行 protect_from_forgery with: :null_session

如果你只为所有继承自ApplicationController. IE

class Api::ApiController < ApplicationController
  #TODO
  protect_from_forgery with: :null_session
end

其他 API 的控制器

class Api::V1::AddressesController < Api::ApiController
  #TODO
end

这个控制器类可以帮助您只对 API 的根而不是整个应用程序进行更改。您还可以使用此控制器在不同版本的 API 之间进行 DRY 操作。

于 2016-01-18T10:14:28.047 回答