Desligue o token CSRF nos trilhos 3


105

Eu tenho um aplicativo rails que serve algumas APIs para um aplicativo iPhone. Quero ser capaz de simplesmente postar em um recurso sem me importar em obter o token CSRF correto. Tentei alguns métodos que vejo aqui no stackoverflow, mas parece que eles não funcionam mais nos trilhos 3.

Obrigado por me ajudar.

Respostas:


175

No controlador onde você deseja desativar o CSRF, a verificação:

skip_before_action :verify_authenticity_token

Ou para desativá-lo para tudo, exceto alguns métodos:

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

Ou para desativar apenas os métodos especificados:

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

Mais informações: RoR Request Forgery Protection


1
Esta é a resposta correta para aplicativos que possuem uma combinação de formulários regulares acessíveis por navegador e terminais de API. A resposta de Markus Proske estaria correta se você tivesse absoluta certeza de que não teria nenhum formulário acessível por navegador em seu aplicativo.
Asfand Qazi

Onde exatamente isso vai? E se o controlador fizer parte de alguma gema?
Jogue fora a conta de

Posso perguntar se você pode responder a essa pergunta muito semelhante? stackoverflow.com/questions/50159847/…

105

No Rails3 você pode desativar o token csrf em seu controlador para métodos específicos:

protect_from_forgery :except => :create 

12
Para quem está lendo, observe que é isso que deve entrar ApplicationController. A resposta de Mike Lewis abaixo ( skip_before_filter :verify_authenticity_token) é como desabilitá-lo por controlador, assumindo que o controlador herda de ApplicationController.
NudeCanalTroll

Parece que não é seguro stackoverflow.com/questions/10676018/… . O que você acha? é isso?
sites

@NudeCanalTroll quer dizer colocar isso no controlador onde eu quero não vai funcionar?
BlackDivine

Posso perguntar se você pode responder a essa pergunta muito semelhante? stackoverflow.com/questions/50159847/…

32

Com o Rails 4, você agora tem a opção de escrever em skip_before_actionvez de skip_before_filter.

# Works in Rails 4 and 5
skip_before_action :verify_authenticity_token

ou

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

1
Qual é a diferença?
Adam D. Ruppe

Posso perguntar se você pode responder a essa pergunta muito semelhante? stackoverflow.com/questions/50159847/…

John Sam, quando eu tiver tempo, vou tentar dar a volta por cima.
jason328
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.