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.