所以这里我有一个调用API的路由,向它发送用户令牌。然后,API生成一个新令牌并将其发送回响应中。
然后我想用新令牌更新req.user.token
,以便我可以继续在会话中进行有效的API调用。但是,我只能在响应范围之外的会话中执行此操作。
这是我的尝试。如何让req.user.token
获取更新后的令牌?
router.post('/:id', function (req, res, next) {
var returnedToken = "";
var options = {
url: configUrl + '/' + req.params.id,
method: 'POST',
headers: {
'token': req.session.passport.user.token,
'caller': 'client[route:POST user]',
'x-request-id': req.requestId,
},
json: req.body
};
request(options, function (error, response, body) {
if (error) {
req.logger.error({err: error}, 'connection to user service has failed');
res.status(500).send(error.message);
} else {
res.status(response.statusCode).send(body);
returnedToken = response.body.token;
}
return next();
})
req.user.token = returnedToken;
});
如果我在请求中设置了req.user.token
,那么它在客户端的其他位置就无法使用。但是,如果我将req.user.token
设置在上面,returnedToken
未定义,因为它显然不在范围内。
我有什么想法可以解决这个问题吗?
由于
答案 0 :(得分:0)
您可以在发送回复之前在req.user.token中设置值。
req.user.token = returnedToken; res.status(response.statusCode)。发送(主体);
因此,下一个中间件也可以使用相同的请求。此外,如果要从用户删除旧会话令牌,可以执行delete(req.user);有了这个,您可以从请求对象中删除旧的令牌值。