我创建了一个中间件来检查jwt 令牌是否已过期。
由于某种原因,TokenHasExpiredError没有被拦截为passport.authenticate
.
这是我的中间件
import { Request, Response, NextFunction } from 'express';
import passport from 'passport';
import { ApiError } from '../classes/error';
const authJwt = (req: Request, res: Response, next: NextFunction) => {
passport.authenticate('jwt', function (err, user, info) {
// TokenExpiredError is not considered as an error?
if (err) return next(err);
if (!user) {
if (info.name === 'TokenExpiredError') {
return next(ApiError.jwtTokenExpired('Jwt Token Expired'));
}
return next(ApiError.unauthenticated('User is not authenticated'));
}
req.user = user;
next();
})(req, res, next);
};
export default authJwt;
我有一些问题:
- 从上面的代码中,为什么
TokenExpiredError
或任何其他错误没有被拦截为错误。 info
回调中的参数是什么?我在文档中找不到它。