2012-01-04 4 views
5

У меня есть маршрут, который перенаправляет после успешного входа в системеЭкспресс перенаправление не меняет req.url

app.post('/login', function(req, res){ 
    if(req.body.password === Server.cfg.auth.userPass) { 
    req.session.user = {nick: req.body.username, pass: req.body.password} 
    res.redirect('/chat') 
    } else { 
    res.render('user/login', { locals: { error: 'Invalid password' } }) 
    } 
}) 

Перенаправление, кажется, работает, как страница обновляются с правильно оказанным файлом нефрит. Тем не менее, url все еще говорит/login, и моя переменная pageTitle (устанавливается через шаблонные vars) тоже не изменяется. Если я обновляю страницу после перенаправления, все изменится так, как должно быть. Только после перенаправления он не меняется.

+0

Не следует ли/чат обернуть в кавычки? res.redirect ("/ chat")? – alessioalex

+0

yesh, спасибо, опечатка при вводе вопроса :) –

+0

Можете ли вы попробовать поставить 'req.method = 'GET';' перед res.redirect? Я знаю, что у меня была аналогичная проблема с перенаправлением на POST-маршруте, и в этот момент это была ошибка в Express. – alessioalex

ответ

1

Это должно быть довольно распространенное смешение для людей, пытающихся справиться с переадресацией 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 
    } 
} 

Client

// 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 
     } 

Это работает по желанию для меня. Я также предлагаю переадресацию на googling ajax post, чтобы понять, почему это