Rails 5 API protect_from_forgery
Tengo una aplicación API Rails 5 (ApplicationController < ActionController::API
) Surgió la necesidad de agregar un formulario GUI simple para un punto final de esta API.
Inicialmente estaba obteniendoActionView::Template::Error undefined method protect_against_forgery?
cuando traté de procesar el formulario. yo añadíinclude ActionController::RequestForgeryProtection
yprotect_from_forgery with:exception
a ese punto final. Lo que resolvió ese problema como se esperaba.
Sin embargo, cuando intento enviar este formulario obtengo:422
Unprocessable Entity
ActionController::InvalidAuthenticityToken
. he añadido<%= csrf_meta_tags %>
y verificado quemeta: csrf-param
ymeta: csrf-token
están presentes en mis encabezados, y esoauthenticity_token
está presente en mi forma. (Las fichas en sí son diferentes entre sí).
He intentado,protect_from_forgery prepend: true, with:exception
, sin efecto. Puedo "solucionar" este problema comentando:protect_from_forgery with:exception
. Pero entiendo que eso está desactivando la protección CSRF en mi formulario. (Quiero protección CSRF).
¿Qué me estoy perdiendo?
ACTUALIZAR:
Para tratar de dejar esto en claro, el 99% de esta aplicación es una API JSON RESTful pura. Surgió la necesidad de agregar una vista y formulario HTML a esta aplicación. Entoncespara un controlador Quiero habilitar la protección CSRF completa. El resto de la aplicación no necesita CSRF y puede permanecer sin cambios.
ACTUALIZACIÓN 2:
Acabo de comparar la fuente de la página del formulario HTML y el encabezado de esta aplicación con otra aplicación Rails 5 convencional que escribí. losauthenticity_token
en el encabezado y elauthenticity_token
en la forma sonlo mismo. En la aplicación API con la que tengo el problema, sondiferente. Tal vez eso es algo?
ACTUALIZACIÓN 3:
Ok, no creo que el desajuste sea el problema. Sin embargo, en otras comparaciones entre las aplicaciones que funcionan y las que no funcionan, noté que no hay nada en Red> Cookies. Veo muchas cosas como_my_app-session
en las cookies de la aplicación de trabajo.