API/JSON: невозможно проверить подлинность токена CSRF

Я пытаюсь создать JSON API для моего приложения на Rails и написал следующий метод:

  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

1 ответ

Решение

Согласно комментарию application_controller.rb вам нужно поставить эту строкуprotect_from_forgery with: :null_session,

Будет лучше, если вы создадите еще один корневой контроллер только для всех контроллеров API, унаследованных от ApplicationController, т.е.

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

Другие контроллеры API

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

Этот класс контроллера может помочь вам вносить изменения только в корень API, а не в целое приложение. Вы также можете использовать этот контроллер для выполнения СУХОГО действия между различными версиями API.

Другие вопросы по тегам