tutorial rubyonrails rails guide ejemplos curso aprender ruby-on-rails ruby-on-rails-4

ruby on rails - rubyonrails - ActionController:: InvalidAuthenticityToken cuando deshabilita la solicitud de JS/Ajax



ruby on rails tutorial (5)

Curiosamente, este comportamiento se modificó en los rieles 4. http://www.alfajango.com/blog/rails-4-whats-new/

Los formularios Rails ahora no mostrarán el campo CSRF en el formulario a menos que lo defina explícitamente como una opción para su formulario:

<%= form_for @some_model, :remote => true, :authenticity_token => true do |f| %> <% end %>

Agregar esta opción le permite degradar con gracia a un respaldo de HTML si Javascript está apagado.

Tengo dos formularios con opción remote: true ; uno envía una solicitud de Ajax para create acción y el otro envía una solicitud de Ajax para destroy acción.

Todos funcionan como multas cuando JavaScript está habilitado, pero si deshabilito JavaScript, entonces hago clic en, obtengo este error:

ActionController::InvalidAuthenticityToken PersonsController#create

¿Por qué se muestra este error y cómo puedo solucionarlo?

nota: estoy usando Rails 4

Actualizar

Cuando uso un formulario normal sin opción remote: true , Rails inserta automáticamente un campo oculto para un token de autenticación, pero cuando uso remote: true en mi formulario no existe dicho campo en el código HTML. Parece que cuando hay remote opción remote , Rails maneja el token de autenticación de manera diferente, entonces, ¿cómo puedo hacer que funcione en ambos casos?


En mi caso solo tuve que agregar esta línea en mi página:

<%= csrf_meta_tags %>


Se sabe que estas características se agregaron con fines de seguridad y falsificación.
Sin embargo, para responder a su pregunta, aquí hay algunas entradas. Puede agregar estas líneas después de su nombre de controlador.

Al igual que,

class NameController < ApplicationController skip_before_action :verify_authenticity_token

Aquí hay algunas líneas para diferentes versiones de rieles.

Carriles 3

skip_before_filter: verify_authenticity_token

Rails 4 :

skip_before_action: verify_authenticity_token


Si tiene la intención de deshabilitar esta característica de seguridad para todas las rutinas del controlador, puede cambiar el valor de protect_from_forgery a : null_session en su archivo application_controller.rb.

Al igual que,

class ApplicationController < ActionController::Base protect_from_forgery with: :null_session end


Si no hay un campo csrf (un campo oculto) dentro del formulario, el envío no puede ser autenticado por el servidor de Rails.

Si haces el formulario por form_tag , esta situación sucederá. El mejor enfoque es usar form_for para un recurso (nuevo objeto o un objeto existente en db) y el campo csrf será construido por Rails automáticamente.


Yo también tuve el mismo problema. He usado form_tag para crear un formulario remoto personalizado, pero obtuve el siguiente error,

ActionController::InvalidAuthenticityToken

Descubrí que esto se debe a que en el rail 4 no agregará toke de autenticidad por defecto, así que agregué la siguiente línea en el archivo application.rb,

config.action_view.embed_authenticity_token_in_remote_forms = true

que verifica automáticamente el toke al enviar los formularios remotos. Esto resuelve el problema para mí. Espero que esto ayude a alguien.