2016-08-23 1 views
4

모바일 클라이언트가 승인 용으로 devise_token_auth과 함께 사용하는 Rails 5 API 프로젝트에서 작업하고 있습니다.레일즈 5 devise_token_auth CSRF 토큰 진 본성을 확인할 수 없습니다.

나는 경고의 의미를 분명히했습니다.

첫번째 질문 :CSRF는 API (JSON/XML) 올바른, 응답에 대한 해제해야 보호?

웹에서 CSRF가 쿠키와 함께 웹 응용 프로그램에서만 발생하는 것으로 조사되었습니다.

그것은 XML 또는 JSON 요청도 영향을받는 것을 기억하는 것이 중요> 당신은 API를 구축하는 경우는 기본적으로와 ApplicationController의 위조 방지> 방법 (변경해야합니다 : : : 예외하지만 난 rails api document에서이 읽기) :

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?} 

당신은 API에 대한 null_session을 사용해야 할 수도 있습니다, 그것은 요청시 빈 세션을 제공하지만 완전히 재설정되지 않습니다. if : with 옵션을 지정하지 않으면 기본값으로 사용됩니다.

+0

감사합니다. Toby! 편집 됨. – Nathan