javascript - 我想在令牌过期时处理错误
问题描述
我想在 accesstoken 过期时使用条件语句来获取 refreshtoken。但是当我运行我的代码并使访问令牌过期时,我不知道在哪里处理错误。
我现在的目标是在令牌过期时得到一个错误,以便像这样 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);
}
}
);
解决方案
令牌过期时,passport.authenticate('jwt')
中间件显然不会出错。
您仍然可以通过传递passport.authenticate()
自定义回调并检查其参数来查明令牌到期情况 -在这种情况下,该info
参数将具有 的name
属性。"TokenExpiredError"
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/(最后自定义回调部分)
推荐阅读
- javascript - 描述两组数据之间的转换......“元转换”?
- java - 如何在没有 onCreate 方法的情况下使用 if 语句启动新 Activity?
- python - 根据另一列的总和将数据框分成十分位数的方法
- azure - 如何制作托管在 Azure 上的应用的副本?
- sql-server - 为什么创建用户定义的表类型需要“USE”?
- assembly - 我需要帮助理解某些说明的含义
- java - 无法从 Maven 类型项目创建类的对象
- python - 具有两个阶段来定义参数的函数
- elasticsearch - 范围查询包括给定的日期还是排除它?
- sd-card - CMD41 后 Sandisk SD 卡冻结