Express redirecting doesn't change req.url

本小妞迷上赌 提交于 2019-12-10 14:32:41

问题


I have a route that redirects upon successful login

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

The redirect seems to work as the page is refreshed with the correctly rendered jade file. However, the url still says /login and my pageTitle variable (being set through template vars) does not change either. If I refresh the page after the redirect, everything changes to the way it should be. It is only after the redirect that it does not change.


回答1:


This has got to be a pretty common mix up for folks trying to deal with ajax redirects coming from a server controlled development background. My example shows what happens if authorization fails, slightly different; but you can use the same concept of intercepting the response and checking status, etc., and let the client JavaScript do the redirect.

My client code is actually a backbone model but in turn is calling jquery's ajax like:

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
      }

This works as desired for me. I'd also suggest googling ajax post redirects to see why this




回答2:


Looks like this is a jQuery problem. At least it was for me. You can override it with rel=external. More info at http://jquerymobile.com/demos/1.1.0/docs/pages/page-navmodel.html.



来源:https://stackoverflow.com/questions/8723975/express-redirecting-doesnt-change-req-url

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!