Это должно быть довольно распространенным явлением для людей, пытающихся работать с ajax-перенаправлениями, происходящими из среды разработки, управляемой сервером. Мой пример показывает, что происходит, если авторизация не проходит, немного по-другому; но вы можете использовать ту же концепцию перехвата ответа и проверки статуса и т. д., и позволить клиентскому JavaScript выполнять перенаправление.
Мой клиентский код на самом деле является базовой моделью, но, в свою очередь, вызывает ajax jquery:
model.save({ error:function...
Сервер
function requiresLogin(req, res, next) {
if(req.session.user) {
next();
} else {
//res.redirect('/sessions/new?redir=' + req.url); // won't work
res.send("Unauthorized", 403); // send 403 http status
}
}
Клиент
// Assumes you can get http status from response
error: function(resp, status, xhr)...
if(resp.status === 403) {
window.location = '/sessions/new'; // optionally put a redirLastPage=somewhere
}
Это работает так, как мне нужно. Я бы также посоветовал Google перенаправить сообщения ajax, чтобы понять, почему это