Apague el token CSRF en rieles 3

105

Tengo una aplicación de rieles que sirve algunas API para una aplicación de iPhone. Quiero poder simplemente publicar en un recurso sin importarme obtener el token CSRF correcto. Probé algunos métodos que veo aquí en stackoverflow pero parece que ya no funcionan en los rieles 3.

Gracias por ayudarme.

Simone D'Amico
fuente

Respuestas:

175

En el controlador donde desea deshabilitar CSRF, verifique:

skip_before_action :verify_authenticity_token

O deshabilitarlo para todo excepto algunos métodos:

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

O para deshabilitar solo los métodos especificados:

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

Más información: RoR Request Forgery Protection

Mike Lewis
fuente
1
Esta es la respuesta correcta para las aplicaciones que tienen una combinación de formularios accesibles desde el navegador y puntos finales de API. La respuesta de Markus Proske sería correcta si estuviera absolutamente seguro de que no tendrá ningún formulario accesible desde el navegador en su aplicación.
Asfand Qazi
¿A dónde va exactamente esto? ¿Y si el controlador forma parte de alguna joya?
Cuenta
¿Puedo preguntarle si puede responder a esta pregunta muy similar? stackoverflow.com/questions/50159847/…
105

En Rails3 puedes deshabilitar el token csrf en tu controlador para métodos particulares:

protect_from_forgery :except => :create 
Markus Proske
fuente
12
Para cualquiera que lea, tenga en cuenta que esto es lo que debería incluir ApplicationController. La respuesta de Mike Lewis a continuación ( skip_before_filter :verify_authenticity_token) es cómo deshabilitarlo por controlador, asumiendo que el controlador hereda de ApplicationController.
NudeCanalTroll
Parece que esto no es seguro stackoverflow.com/questions/10676018/… . ¿Qué piensas? ¿Lo es?
sitios
@NudeCanalTroll, ¿te refieres a poner esto en el controlador donde quiero que no funcione?
BlackDivine
¿Puedo preguntarle si puede responder a esta pregunta muy similar? stackoverflow.com/questions/50159847/…
32

Con Rails 4, ahora tiene la opción de escribir en skip_before_actionlugar de skip_before_filter.

# Works in Rails 4 and 5
skip_before_action :verify_authenticity_token

o

# Works in Rails 3 and 4 (deprecated in Rails 4 and removed in Rails 5)
skip_before_filter :verify_authenticity_token
jason328
fuente
1
¿Cual es la diferencia?
Adam D. Ruppe
¿Puedo preguntarle si puede responder a esta pregunta muy similar? stackoverflow.com/questions/50159847/…
John Sam, cuando tenga tiempo intentaré hacerlo.
jason328