web-dev-qa-db-ja.com

Express-JWTでエラーを処理する方法

Express-jwtライブラリを取り込もうとしていますが、エラー処理がどのように機能するのかよくわかりません。

ドキュメント は言う:

エラー処理

デフォルトの動作では、トークンが無効な場合にエラーがスローされるため、次のようにカスタムロジックを追加して不正アクセスを管理できます。

    app.use(function (err, req, res, next) {
      if (err.name === 'UnauthorizedError') {
        res.status(401).send('invalid token...');
      }
    });

しかし、私はそれがどのように機能するか混乱しています。単純なreqresの状況で、トークンが有効な場合はnextを呼び出し、有効な場合はエラーでnextを呼び出したい場合そうではなく、どこに置くかapp.use 関数?

たとえば、これが私のコードです:

router.post('/', expressJwt({  
  secret: jwtSecret,     
  credentialsRequired: false  
}), (req, res, next) => {   
  databaseController.findUser(req.user.email, (err, user) => {          
    if (err) {          
      return next(err)      
    }                        
    res.json(user)     
  })         
})

ここでのerrは、express-jwt検証からではなく、私のDB呼び出しから取得されます。どんな助けでも大歓迎です。

8
Startec

もう1つの方法は、app.useを使用してミドルウェアを配置し、ヘッダーまたはクエリ文字列内の有効なjwtについてすべてのルートをスキャンすることです。パブリックエンドポイントは、unlessキーワードを使用して免除できます。例:

app.use(expressjwt({credentialsRequired: true, secret: config.TOKEN_SECRET, requestProperty: 'user'}).unless({path: config.PUBLIC_URLs}));

app.use(function(err, req, res, next) {
    if(err.name === 'UnauthorizedError') {
      res.status(err.status).send({message:err.message});
      logger.error(err);
      return;
    }
 next();
});
20
Amruta-Pani