Rails не может проверить подлинность токена CSRF

Я успешно создал новую запись, используя API-интерфейс post, подобный этому (используя Curl::PostField)

curl_post_fields = [
    Curl::PostField.content('first_name', first_name),
    Curl::PostField.content('last_name', last_name),]

  contact = Curl::Easy.http_post("#{ENV['API_V1_URL']}/contacts", *curl_post_fields)
  contact.ssl_verify_peer = false
  contact.http_auth_types = :basic
  contact.username = ENV['API_V1_USERNAME']
  contact.password = ENV['API_V1_PASSWORD']
  contact.perform
  response = JSON.parse(contact.body_str)

но когда я обновлял запись с помощью патча, подобного этому (используя параметр запроса json):

contact = Curl.patch("#{ENV['API_V1_URL']}/contacts/#{qontak_id}",{:email => email, :gender_id => 8})
contact.ssl_verify_peer = false
contact.http_auth_types = :basic
contact.username = ENV['API_V1_USERNAME']
contact.password = ENV['API_V1_PASSWORD']
contact.perform
response = JSON.parse(contact.body_str)

я получил некоторые ошибки с сервера

Can't verify CSRF token authenticity

Filter chain halted as :authenticate rendered or redirected

также я отключил csrf protect_from_forgery with: :null_session

возможно, что использование Curl::PostField автоматически включает csrf token или есть ли аналогичный способ, например Curl::Postfield в patch or put method ?


person Jais Anasrulloh Ja'fari    schedule 24.02.2017    source источник
comment
Привет, ребята, я все еще застрял на этом, помогите, пожалуйста?   -  person Jais Anasrulloh Ja'fari    schedule 28.02.2017


Ответы (1)


Вы можете попробовать явно пропустить фильтр токенов.

В вашем контроллере API:

skip_before_filter :verify_authenticity_token, only: [:put] respond_to :json

Не забудьте также перезагрузить сервер. Надеюсь это поможет!

person tmikeschu    schedule 24.02.2017
comment
Делает ли это API менее безопасным? - person Jais Anasrulloh Ja'fari; 24.02.2017
comment
Мне было интересно, есть ли другой способ без отключения csrf или пропуска проверки токена? - person Jais Anasrulloh Ja'fari; 24.02.2017
comment
Вы можете добавить свой собственный ключ api_key и потребовать его в контроллере приложения. Это распространенная проблема, с которой я столкнулся буквально на днях, и я думаю, что она связана с Rails 5. Вы используете приложение только для API? - person tmikeschu; 24.02.2017
comment
слишком ненадежное решение - person Малъ Скрылевъ; 11.02.2018