Express-jwtライブラリを取り込もうとしていますが、エラー処理がどのように機能するのかよくわかりません。
ドキュメント は言う:
エラー処理
デフォルトの動作では、トークンが無効な場合にエラーがスローされるため、次のようにカスタムロジックを追加して不正アクセスを管理できます。
app.use(function (err, req, res, next) {
if (err.name === 'UnauthorizedError') {
res.status(401).send('invalid token...');
}
});
しかし、私はそれがどのように機能するか混乱しています。単純なreq
res
の状況で、トークンが有効な場合は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呼び出しから取得されます。どんな助けでも大歓迎です。
もう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();
});