2012-07-31 23 views
8

Tengo problemas con el token de autenticidad de los rieles y el inicio/cierre de sesión de Devise.Rails CSRF token authenticity y Devise

Estoy usando backbone js para compilar una aplicación de una sola página, así que uso ajax para iniciar/cerrar sesión en el usuario. Esto es lo que estoy observando y no entiendo exactamente por qué está sucediendo esto.

Tengo csrf_meta_tags en mi diseño. la página se carga, hago clic en un botón de inicio de sesión para completar un formulario y enviarlo, he iniciado sesión correctamente. Puedo hacer cosas que un usuario conectado debe poder hacer.

Ahora hago clic en un botón de cerrar sesión que envía una solicitud DELETE a través de ajax y he cerrado la sesión correctamente.

Todo el proceso anterior está en una sola página, no hay recargas de página, todo es ajax.

Ahora cuando hago clic en iniciar sesión de nuevo y llene el formulario, envía la solicitud ajax, me registra pero muestra un mensaje de advertencia en la consola del servidor.

WARNING: Can't verify CSRF token authenticity 

Ahora ¿por qué (diseñar) Me conectarse, en primer lugar, si (rieles) no pudo verificar la autenticidad CSRF token.

y ahora cuando intento hacer cosas que un usuario conectado debe ser capaz de hacer que falle, la publicación de un formulario de falla con mensaje de error del legado

401 Unauthorized {"error":"You need to sign in or sign up before continuing."} 

y una advertencia en la consola del servidor

WARNING: Can't verify CSRF token authenticity 

y en este momento estoy conectado a cabo, Si actualiza la página yo puedo ver que estoy más conectado.

¿Qué está pasando?

¿Mi primer token de autenticidad caduca después de que cerré la sesión la primera vez?

estoy usando

rails (3.2.3) 
devise (2.1.0) 

Gracias de antemano :)

+2

Exactamente el mismo problema que estoy teniendo. Comente si ha encontrado la solución. Thx – vrepsys

+0

Sé por qué está surgiendo el problema. Es porque el token csrf caduca en el inicio de sesión y, dado que es un ajax basado en el signo_out, la página no se recarga y el nuevo token no entra en la página, lo que causa una discrepancia en la solicitud posterior. por ahora estoy recargando la página en sign_out para solucionar el problema. Alguien (¿puede ser usted?) Publicó el mismo en la lista de correo del inventorio. Veamos si podemos conseguir algo allí ... – Abid

+0

@Abid, tengo el mismo error con mi viejo proyecto de carriles, me vuelve loco, ¿encontraste la solución? si tiene, háganos saber, tkx – Neo

Respuesta

1

usted tiene que enviar authenticity_token variable, con todas sus peticiones ajax. Puede completarlo desde la metaetiqueta de la página.

+0

se está enviando. el problema solo ocurre cuando inicio sesión por segunda vez ... parece que el token funciona solo para una sesión – Abid

Cuestiones relacionadas