在节点

时间:2016-11-21 11:24:59

标签: node.js express passport.js

所以这里我有一个调用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未定义,因为它显然不在范围内。

我有什么想法可以解决这个问题吗?

由于

1 个答案:

答案 0 :(得分:0)

您可以在发送回复之前在req.user.token中设置值。

req.user.token = returnedToken; res.status(response.statusCode)。发送(主体);

因此,下一个中间件也可以使用相同的请求。此外,如果要从用户删除旧会话令牌,可以执行delete(req.user);有了这个,您可以从请求对象中删除旧的令牌值。