2011-05-09 10 views
6

Estoy usando el dispositivo en mi aplicación y no recibo mensajes de error cuando falla el inicio de sesión.No visualizo los mensajes de error de inicio de sesión

Tengo flash [: notice] y flash [: alert] en la página de inicio de sesión.

Intenté muchas cosas y cuando eliminé 'protect_from_forgery' del controlador de la aplicación, recibí los mensajes de error.

También estoy usando Cancan en mi aplicación, ¿puede haber algún problema al respecto? ¿Algunas ideas?

Gracias

Respuesta

2

Estoy adivinando la verificación de autenticidad está fallando. ¿Sus formularios están enviando la autenticidad_token con publicaciones? Si eliminar protect_from_forgery lo soluciona, este es casi seguro el problema.

Asegúrese de que todas las solicitudes que no se obtienen envíen un parámetro authenticity_token con el valor devuelto por la función de rieles form_authenticity_token. Si usa form_for en sus vistas, esto debería suceder automágicamente. Verifique su html para asegurarse de que el token de autenticidad en el formulario debe coincidir con el valor devuelto por el método form_authenticity_token.

+0

Buena respuesta @drewbob. ¡Tuve este problema ayer! – thefugal

1

Es cierto que es un poco hacky, pero estoy usando este ayudante (app/helpers/devise_helper.rb) para tomar flashes y usarlos si está configurado por defecto en resource.errors. El controlador de sesiones de Devise no parece usar los errores del modelo, pero usa alertas de flash en su lugar. Esto solo se basa en el ayudante que está en la ide de lib.

module DeviseHelper 

    def devise_error_messages! 
    flash_alerts = [] 
    error_key = 'errors.messages.not_saved' 

    if !flash.empty? 
     flash_alerts.push(flash[:error]) if flash[:error] 
     flash_alerts.push(flash[:alert]) if flash[:alert] 
     flash_alerts.push(flash[:notice]) if flash[:notice] 
     error_key = 'devise.failure.invalid' 
    end 

    return "" if resource.errors.empty? && flash_alerts.empty? 
    errors = resource.errors.empty? ? flash_alerts : resource.errors.full_messages 

    messages = errors.map { |msg| content_tag(:li, msg) }.join 
    sentence = I18n.t(error_key, :count => errors.count, 
           :resource => resource.class.model_name.human.downcase) 

    html = <<-HTML 
    <div id="error_explanation"> 
     <h2>#{sentence}</h2> 
     <ul>#{messages}</ul> 
    </div> 
    HTML 

    html.html_safe 
    end 

end 
Cuestiones relacionadas