2012-01-04 17 views
5

tengo una ruta que redirige al iniciar sesión con éxitoexpreso redireccionamiento no cambiar 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' } }) 
    } 
}) 

La redirección parece funcionar como la página se actualiza con el archivo de jade correctamente rendido. Sin embargo, la url aún dice/login y mi variable pageTitle (que se establece a través de plantilla vars) tampoco cambia. Si actualizo la página después de la redirección, todo cambia a la forma en que debería ser. Solo después de la redirección no cambia.

+0

¿No debería/chat estar entre comillas? res.redirect ("/ chat")? – alessioalex

+0

yesh, gracias, error al ingresar la pregunta :) –

+0

¿Puedes intentar poner 'req.method = 'GET';' antes de res.redirect? Sé que he tenido un problema similar con la redirección en una ruta POST y esto era un error en Express en ese momento. – alessioalex

Respuesta

1

Esto tiene que ser una mezcla bastante común para las personas que intentan lidiar con los redireccionamientos ajax provenientes de un fondo de desarrollo controlado por el servidor. Mi ejemplo muestra qué sucede si la autorización falla, ligeramente diferente; pero puede usar el mismo concepto de interceptar la respuesta y verificar el estado, etc., y dejar que el JavaScript del cliente haga la redirección.

Mi código de cliente es en realidad un modelo de columna vertebral, pero a su vez está llamando ajax de jQuery como:

model.save({ error:function... 

servidor

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

cliente

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

Esto funciona como se desea para mi. También sugiero googlear redireccionamientos de correos ayax para ver por qué esto

Cuestiones relacionadas