2012-03-28 8 views
6

Tengo un formulario con: remote => true, lo que significa que se enviará a través de ajax.cómo manejar el authenticate_user del diseñador! con llamada ajax?

en el controlador, que tienen tal código:

before_filter: authenticate_user!, :only => [:create] 

Por sólo yo permitir confirmó usuario para crear recursos.

Sin embargo, cuando la autenticación falla, idear elevará un

Completed 401 Unauthorized 

y sin Javascript discreta se representará.

Pero espero que las cosas dice así:

legado establecido algunos mensajes de flash, y hacen mi .js.erb, a continuación, les muestro el flash a los usuarios.

¿Cómo conseguirlo?

+0

No puedo creer ... pero tengo el mismo problema en la actualidad con 2.0.0.rc legado ... Sólo agregue a su pregunta que realmente no quiero cambiar la acción de crear controlador de sesión ... ¡también anulando authenticate_user! parece ser ridículo ... los formatos de navegación cambian en la configuración (agregar: js,: json) no funciona para mí –

Respuesta

3

¡Tienes que hacer tu propio authenticate_user! acción y en esta acción puede tener el comportamiento que desee.

def authenticate_user! 
    unless current_user 
    render 'my_js' 
    end 
end 
10

Es muy divertido, pero cambia en devise.rb http_authenticatable_on_xhr en false

config.http_authenticatable_on_xhr = false 

hizo el truco para mí ... sin anulando authenticate_user! Método

nota: Yo también agregó: js a los formatos de navegación

config.navigational_formats = [:"*/*", "*/*", :html, :js] 
+0

es lógico en eso ... con el indicador establecido en verdadero la solicitud ajax devuelve solo encabezados para 401 - entonces para instancia para llamadas JSON es útil. Cuando desee una respuesta real del cuerpo, debe establecer esta bandera en falso –

+1

Sí, funciona. Pero todavía tengo un problema. Cuando falla la autenticación, idear representará a los usuarios/sign_in.js, ¿cómo cambiarlo? Quiero decir que quiero renderizar mi propio archivo js y no necesariamente en la carpeta public/users /. – HanXu

+0

Estoy bastante seguro de que los usuarios/sign_in.js.erb no deberían estar en la carpeta pública/usuarios que mencionaste, pero dentro de la aplicación/views/users/sign_in.js.erb (o lo que sea que digas) Volver a tu problema - Me temo que no se puede obtener otra vista de la que llaman sin anular a authenticate_user. –

Cuestiones relacionadas