Tengo un problema muy extraño con Rails y ajax con jQuery (aunque no creo que sea específico de jQuery).Rieles que no vuelven a cargar la sesión en la publicación de ajax
La aplicación My Rails utiliza el almacén de sesiones de cookies, y tengo un inicio de sesión muy simple que establece la identificación del usuario en la sesión. Si user_id no está configurado en la sesión, redirige a una página de inicio de sesión. Esto funciona sin problemas. Las solicitudes JQuery GET también funcionan bien. El problema es cuando hago una POST jQuery - el navegador envía la cookie de sesión bien (confirmé esto con Firebug y volcando request.cookies en el registro) pero la sesión está en blanco, es decir, la sesión es {}.
que estoy haciendo esto en mis application.js:
$(document).ajaxSend(function(e, xhr, options) {
var token = $("meta[name='csrf-token']").attr('content');
xhr.setRequestHeader('X-CSRF-Token', token);
});
y aquí está mi puesto de ejemplo:
$.post('/test/1', { _method: 'delete' }, null, 'json');
que debe llegar a este método controlador (_method: eliminar):
def destroy
respond_to do |format|
format.json { render :json => { :destroyed => 'ok' }.to_json }
end
end
Al mirar el registro y el uso de Firebug puedo confirmar que se envía el valor correcto de la cookie en la solicitud que ader cuando se produce la publicación ajax, pero parece que en algún momento Rails pierde este valor y, por lo tanto, pierde la sesión, por lo que redirige a la página de inicio de sesión y nunca llega al método.
He intentado todo lo que puedo pensar para depurar esto, pero estoy llegando a la idea de que esto podría ser un error en Rails. Estoy usando Rails 3.0.4 y jQuery 1.5 si eso ayuda. Me resulta muy extraño que funcionen las solicitudes de envío y publicación regulares (es decir, no ajax), y las solicitudes de ajax funcionan sin problemas, solo son las publicaciones ajax las que no lo hacen.
¡Cualquier ayuda para tratar de arreglar esto sería muy apreciada!
Muchas gracias,
de Dave
Esta etiqueta ha sido reemplazada con 'csrf_meta_tags' – ChrisW