2016-08-23 5 views
4

Я работаю над проектом Rails 5 api, который используется мобильным клиентом с драгоценным камнем devise_token_auth для авторизации.Rails 5 devise_token_auth Не удается проверить подлинность CSRF-токена

Я понимаю, что означает предупреждение.

первый вопрос:CSRF защиты должен быть отключен для апи (JSON/XML) ответить, правильно?

Я искал некоторые в Интернете, кажется, что CSRF просто происходит в веб-приложении с помощью файла cookie. Но я прочитал это из rails api documen т:

Важно помнить, что XML или JSON запросы также влияют> и если вы разрабатываете API, вы должны изменить защиту от подделки> метод в ApplicationController (по умолчанию:: исключение):

class ApplicationController < ActionController::Base protect_from_forgery unless: -> { request.format.json? } end

Так я все еще получаю предупреждение, добавив, как это:

class ApplicationController < ActionController::Base 
    protect_from_forgery unless: -> { request.format.json? } 
    include DeviseTokenAuth::Concerns::SetUserByToken 
end 

второй вопрос: Если API не нуждается в защите от CSRF, почему

protect_from_forgery unless: -> { request.format.json? } 

не работает?

Не уверен, что я понял что-то неправильно. Спасибо!

ответ

6

код должен быть:

protect_from_forgery with: :null_session, if: ->{request.format.json?} 

Вы, возможно, придется использовать null_session для API, он обеспечивает пустой сеанс во время запроса, но не сбрасывает его полностью. Используется по умолчанию, если: с опцией не указана.

+0

Спасибо, Тоби! Ред. – Nathan

Смежные вопросы