2011-04-14 4 views
82

iphone 애플리케이션에 일부 api를 제공하는 레일 앱이 있습니다. 정확한 csrf 토큰을 얻으 려하지 않고 리소스에 게시 할 수 있기를 원합니다. 나는 stackoverflow에서 여기 보이는 몇 가지 방법을 시도했지만 그들은 더 이상 레일 3에서 작동하지 않는 것 같다. 도와 주셔서 감사합니다.레일 3에서 CSRF 토큰 끄기

당신이 CSRF를 체크 해제 할 컨트롤러에서

답변

132

:

skip_before_action :verify_authenticity_token 

또는 몇 가지 방법을 제외한 모든 위해를 비활성화 :

skip_before_action :verify_authenticity_token, :except => [:update, :create] 

또는 단지 지정 방법을 비활성화 :

skip_before_action :verify_authenticity_token, :only => [:custom_auth, :update] 

자세한 정보 : RoR Request Forgery Protection

+1

이 일반 브라우저 접근 양식 및 API 엔드 포인트의 혼합이 애플 리케이션을위한 정답입니다. Markus Proske의 대답은 앱에 브라우저 액세스 가능 형식을 사용하지 않을 것이라는 확신이 있다면 정확합니다. –

+0

정확히 어디로 가나 요? 어떤 보석의 컨트롤러 부분이라면 어떨까요? –

102

Rails3에서 당신은 특정 방법에 대한 컨트롤러의 CSRF 토큰을 사용하지 않도록 설정할 수 있습니다 : 레일 4

protect_from_forgery :except => :create 
+12

누구나 읽을 수 있듯이, 이것이'ApplicationController'에 들어 있어야한다는 점에 유의하십시오. 아래의 마이크 루이스 (Mike Lewis) 응답 ('skip_before_filter : verify_authenticity_token')은 컨트롤러가'ApplicationController'를 상속 받았다고 가정 할 때 컨트롤러별로이를 비활성화하는 방법입니다. – NudeCanalTroll

+0

안전하지 않은 것 같습니다. http://stackoverflow.com/questions/10676018/security-safe-to-disable-csrf-tokens-for-json-rails-calls. 어떻게 생각해? 그렇지? – juanpastas

+0

@NudeCanalTroll 당신이 컨트롤러가 작동하지 않을 곳에서 이것을 넣는 것을 의미합니까? – BlackDivine

28

, 당신은 지금 skip_before_action 대신 skip_before_filter 쓸 수있는 옵션이 있습니다.

# Works in Rails 4 and 5 
skip_before_action :verify_authenticity_token 

또는

# Works in Rails 3 and 4 (deprecated in Rails 4 and removed in Rails 5) 
skip_before_filter :verify_authenticity_token 
+0

다른 점은 무엇입니까? –

+5

올바르게 기억한다면 필터는 사용되지 않습니다. – nruth

관련 문제