在重定向之前设置Express响应标头

wkd*_*wkd 9 routing http-headers node.js express

我正在实现一个站点登录,它接收一个电子邮件/密码组合,检索一个API令牌,然后将其返回给用户,以便在localStorage中存储(加密).

目前,在成功发布到POST时/login,应用程序会将用户重定向到索引页面,并将令牌作为查询附加,如此(如此处所示):

login.post('/', function(req, res) {
    ...checking password...

    Auth.getToken(user, function(err, token) {
        res.redirect('/?token=' + token);
    });
});
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我希望尽可能保持我的URL清洁,并将令牌设置为标题:

login.post('/', function(req, res) {
    ...checking password...

    Auth.getToken(user, function(err, token) {
        res.set('x-access-token', token);
        console.log(res._headers);
            // --> {'x-powered-by': 'Express', 'x-access-token': <token>}
        res.redirect('/');
    });
});
Run Code Online (Sandbox Code Playgroud)

console.log-ing res._headers显示标头已按预期设置,但是当我req.headers将索引页面登录时,它没有显示:

{ host: 'localhost:3000',
  connection: 'keep-alive',
 'cache-control': 'max-age=0',
 accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
 'upgrade-insecure-requests': '1',
 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36',
 referer: 'http://localhost:3000/login',
 'accept-encoding': 'gzip, deflate, sdch',
 'accept-language': 'en-US,en;q=0.8',
 cookie: 'ifusr=crwj; _ga=GA1.1.1933420201.1409901705',
 'if-none-match': '"1195161647"' }
Run Code Online (Sandbox Code Playgroud)

任何建议赞赏!

Jul*_*que 10

设置标头在这里不起作用,因为重定向将执行新的http请求,您可以使用快速会话来存储身份验证令牌并在需要时获取它

req.session.accessToken = token
Run Code Online (Sandbox Code Playgroud)

  • 因此,如果我不想使用会话,那么查询字符串几乎是我将上下文传递给新请求的唯一选择吗? (3认同)