我想在令牌过期时处理错误
Posted
技术标签:
【中文标题】我想在令牌过期时处理错误【英文标题】:I would like to handle error when the token has expired 【发布时间】:2021-07-29 02:55:59 【问题描述】:我想在 accesstoken 过期时使用条件语句来获取 refreshtoken。但是当我运行我的代码并使 accesstoken 过期时,我不知道在哪里处理错误。
我现在的目标是在令牌过期时获取错误,以便将错误字符串写入控制台,如下所示 if(error)console.log("error")。
那么我该如何修复代码呢?
这是 index.js 中的代码检查 jwt 令牌是否有效。
(index.js)
const JWTConfig =
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: "jwt-secret-key",
;
const JWTVerify = async (jwtPayload, done) =>
try
const user = await User.findOne( where: snsId: jwtPayload.id );
if (user)
done(null, user);
return;
done(null, false, reason: "올바르지 않은 인증정보 입니다." );
catch (error)
console.error(error);
done(error);
;
kakao();
module.exports = () =>
passport.use("jwt", new JWTStrategy(JWTConfig, JWTVerify));
;
(auth.js)
router.post(
"/me",
// auth,
passport.authenticate("jwt", session: false ),
async (req, res, next) =>
try
console.log("?????")
res.status(201).json(fullUserWithoutPassword);
catch (error)
console.error(error);
next(error);
);
【问题讨论】:
如果您的try, catch
中的用户不存在且为假,您想返回错误,对吗?
【参考方案1】:
passport.authenticate('jwt')
中间件显然不会在令牌过期时出错。
您仍然可以通过传递 passport.authenticate()
自定义回调并检查其 info
参数来查明令牌过期情况 - 在这种情况下,该参数将具有 "TokenExpiredError"
的 name
属性。
app.get('/login', function(req, res, next)
passport.authenticate('jwt', function(error, payload, info)
if(error)
return next(error);
console.log(info.name) // output: "TokenExpiredError"
res.status(201).json(//..);
)(req, res, next);
);
在此处查看有关自定义回调模式的更多信息:
http://www.passportjs.org/docs/authenticate/(自定义回调部分在最后)
【讨论】:
但是,即使令牌没有过期,信息也会继续运行。以上是关于我想在令牌过期时处理错误的主要内容,如果未能解决你的问题,请参考以下文章