2012-01-04 10 views
5

Ho un percorso che reindirizza al login di successoespresso reindirizzamento non cambia 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' } }) 
    } 
}) 

Il reindirizzamento sembra funzionare come pagina viene aggiornata con il file di giada reso correttamente. Tuttavia, l'url dice ancora/login e la mia variabile pageTitle (impostata tramite le vars dei template) non cambia neanche. Se aggiorno la pagina dopo il reindirizzamento, tutto cambia nel modo in cui dovrebbe essere. È solo dopo il reindirizzamento che non cambia.

+0

Non dovrebbe/chat essere racchiuso tra virgolette? res.redirect ("/ chat")? – alessioalex

+0

yesh, grazie, errore nell'immissione della domanda :) –

+0

Puoi provare a mettere 'req.method = 'GET';' prima res.redirect? So che ho avuto un problema simile con il reindirizzamento su una rotta POST e questo era un bug in Express in quel momento. – alessioalex

risposta

1

Questo deve essere un mix piuttosto comune per le persone che cercano di gestire i reindirizzamenti ajax provenienti da uno sfondo di sviluppo controllato dal server. Il mio esempio mostra cosa succede se l'autorizzazione fallisce, leggermente diversa; ma puoi utilizzare lo stesso concetto di intercettazione della risposta e controllo dello stato, ecc. e lasciare che il client JavaScript esegua il reindirizzamento.

Il mio codice cliente è in realtà un modello di spina dorsale, ma a sua volta è chiamata ajax di jQuery come:

model.save({ error:function... 

Server

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 
     } 

Questo funziona, se lo desideri per me. Vorrei anche suggerire googling reindirizzamenti ajax per vedere perché questo