Wyłącz token CSRF w szynach 3

105

Mam aplikację rails, która obsługuje niektóre interfejsy API do aplikacji na iPhone'a. Chcę móc po prostu opublikować post na zasobie, nie myśląc o uzyskaniu prawidłowego tokena CSRF. Wypróbowałem kilka metod, które widzę tutaj w przepływie stosu, ale wygląda na to, że nie działają już na szynach 3.

Dziękuję za pomoc.

Simone D'Amico
źródło

Odpowiedzi:

175

W kontrolerze, w którym chcesz wyłączyć CSRF sprawdź:

skip_before_action :verify_authenticity_token

Lub wyłączyć go na wszystko oprócz kilku metod:

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

Lub wyłączyć tylko określone metody:

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

Więcej informacji: RoR Request Forgery Protection

Mike Lewis
źródło
1
To jest poprawna odpowiedź w przypadku aplikacji, które mają połączenie zwykłych formularzy dostępnych w przeglądarce i punktów końcowych interfejsu API. Odpowiedź od Markusa Proske byłaby poprawna, gdybyś był absolutnie pewien, że nie będziesz mieć żadnych formularzy dostępnych w przeglądarce w swojej aplikacji.
Asfand Qazi
Gdzie dokładnie to idzie? Co jeśli kontroler jest częścią jakiegoś klejnotu?
Wyrzuć konto
Czy mogę zapytać, czy możesz odpowiedzieć na to bardzo podobne pytanie? stackoverflow.com/questions/50159847/…
105

W Rails3 możesz wyłączyć token csrf w kontrolerze dla określonych metod:

protect_from_forgery :except => :create 
Markus Proske
źródło
12
Każdy, kto czyta, powinien pamiętać, że to właśnie powinno się znaleźć ApplicationController. Odpowiedź Mike'a Lewisa poniżej ( skip_before_filter :verify_authenticity_token) to sposób wyłączenia go dla każdego kontrolera, zakładając, że kontroler dziedziczy po ApplicationController.
NudeCanalTroll
Wygląda na to, że jest to niebezpieczne stackoverflow.com/questions/10676018/… . Co myślisz? czy to jest
witryny
@NudeCanalTroll masz na myśli umieszczenie tego w kontrolerze tam, gdzie chcę, aby nie zadziałało?
BlackDivine
Czy mogę zapytać, czy możesz odpowiedzieć na to bardzo podobne pytanie? stackoverflow.com/questions/50159847/…
32

W Rails 4 masz teraz możliwość wpisywania skip_before_actionzamiast skip_before_filter.

# Works in Rails 4 and 5
skip_before_action :verify_authenticity_token

lub

# Works in Rails 3 and 4 (deprecated in Rails 4 and removed in Rails 5)
skip_before_filter :verify_authenticity_token
jason328
źródło
1
Co za różnica?
Adam D. Ruppe
Czy mogę zapytać, czy możesz odpowiedzieć na to bardzo podobne pytanie? stackoverflow.com/questions/50159847/…
John Sam, kiedy będę miał czas, spróbuję się do tego zabrać.
jason328