2010-11-03 10 views
27

construyo la etiqueta de formulario por mí mismo, cuando envío el formulario al servidor me da un error de InvalidAuthenticityToken, por lo que quiero saber cómo añadir que en mi propia en la situación actual



cómo generar AuthenticityToken sobre raíles

ActionController::InvalidAuthenticityToken in CropsController#update 


ActionController::InvalidAuthenticityToken 

Rails.root: /home/mlzboy/my/crop2 
Application Trace | Framework Trace | Full Trace 

Respuesta

62

Hay un ayudante de vista de llamada form_authenticity_token que devuelve token de autenticidad de la sesión actual.

En su view.html.erb:

<form action="/blah" method="POST"> 
    <input name="authenticity_token" value="<%= form_authenticity_token %>" type="hidden"> 
    <input name="first_name" type="text"> 
</form> 
+6

Gracias, tal vez de una manera más carriles idiomática sería '' '<% = hidden_field_tag: authenticity_token, form_authenticity_token%> '' ' – luopio

-1

Esto es lo que hice y funcionó:

<form action="https://stackoverflow.com/users/sign_in" method="post" accept-charset="UTF-8" class="login-form new_user" id="new_user"> 
    <input name="utf8" type="hidden" value="&#x2713;" /> 
    <input name="authenticity_token" value="<%= form_authenticity_token %>" type="hidden"> 
    <label for="user_email"> 
     <span>Email:</span> 
     <input autofocus="autofocus" type="email" name="user[email]" id="user_email" required /> 
    </label> 
    <label for="user_remember_me"> 
     <span>Password:</span> 
     <input autocomplete="off" type="password" name="user[password]" id="user_password" required /> 
    </label> 
    <a href="#" class="forgot-password-link">Forgot your password?</a> 
    <button type="submit" class="btn btn-primary submit">Log In</button> 
</form> 
5

Esta respuesta es primero para carriles forman etiqueta de símbolo en Google por lo que manténgalo simple para las futuras generaciones de Google: simplemente use token_tag, es una ayuda definida en ActionView::Helpers::UrlHelper que devuelve una entrada oculta con form_authenticity_token como valor predeterminado.

0

Para generar el token, debe utilizar el método: form_authenticity_token, como se indicó correctamente en @flitzwald. Puesto que se rediced en la preocupación de un controlador activo, debe incluir el módulo en un controlador expclicitly antes de utilizar de la siguiente manera:

include ActionController::RequestForgeryProtection 

# use 

def set_csrf_header 
    response.headers['X-CSRF-Token'] = form_authenticity_token 
end 
Cuestiones relacionadas