2016-11-21 1 views
0

のreq.userセッションで更新されたトークンを設定するここでは、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を設定した場合、それは他の場所で、クライアントでは利用できません。しかし、私がreturnedTokenの上にあるreq.user.tokenを設定すると、明らかに範囲外になるため、未定義です。

どうすればこの問題を回避できますか?

おかげ

答えて

0

あなたが応答を送信する前に、あなたはreq.user.tokenに値を設定することができます。

req.user.token = returnedToken; res.status(response.statusCode).send(body);

次のミドルウェアでも同じリクエストが利用できるようになります。また、古いセッショントークンをユーザーから削除したい場合は、delete(req.user)を実行できます。これにより、要求オブジェクトから古いトークン値を削除することができます。

+0

ありがとうございました。それはうまくいきました。 – Sam