jwt - 将回调迁移到异步
问题描述
我正在努力迁移一个验证 JWT 令牌然后使用解码的凭据进行数据库调用的 HAPI 函数。
问题是jwt.verify
使用回调,但 Hapi 和 Hapi.MySQL2 都已更新为使用async
函数
主要功能如下
exports.LoadAuth = (req, h) => {
let token = req.headers.authorization.split(' ')[1]
VerifyToken(token, async function (err, decoded) {
if (!err) {
let sql = '#SELECT STATEMENT USING decoded.id'
const [data] = await mfjobs.query(sql, decoded.id)
let auids = []
data.forEach(function (ag) {
auids.push(ag.Name)
})
auids = base64(auids.toString())
return auids
} else {
return {message: 'Not Authorised'}
}
})
}
验证令牌函数如下:
VerifyToken = (tok, done) => {
jwt.verify(tok, Buffer.from(secret, 'base64'), function (err, decTok) {
if (err) {
done(err)
} else {
done(null, decTok)
}
})
}
调试上面的所有内容,直到数据应该返回到前端。此时我得到一个ERROR 500
我知道问题出在VerifyToken
函数上,好像我省略了这个并将decoded.id
正确的数据硬编码到查询中一样到达前端。
任何指针?
解决方案
你可以将你的VerifyToken
函数转换为 Promises。
let VerifyToken = (tok) => {
return new Promise((resolve, reject) => {
jwt.verify(tok, Buffer.from(secret, 'base64'), function (err, decTok) {
if (err) {
reject(err)
} else {
resolve(decTok)
}
})
});
}
现在您有了一个可以与 async await 表示法一起使用的函数,并通过回调在内部检查 jwt 验证。
然后我们可以稍微修改你的控制器如下。
exports.LoadAuth = async (req, h) => {
let token = req.headers.authorization.split(' ')[1];
try {
let decoded = await VerifyToken(token);
let sql = '#SELECT STATEMENT USING decoded.id';
const [data] = await mfjobs.query(sql, decoded.id);
let auids = [];
data.forEach(function (ag) {
auids.push(ag.Name)
});
auids = base64(auids.toString());
return auids
} catch (e) {
return {message: 'Not Authorised'}
}
}
我们刚刚将您的处理函数转换为异步函数,并且我们已经有一个VerifyToken
返回承诺的函数,因此我们可以使用await
运算符调用它。
推荐阅读
- scala - 没有架构的行上的 java.lang.UnsupportedOperationExceptionfieldIndex 未定义:row.getAs [String] 上的异常
- php - 递归函数没有按预期工作。
- swift - UICollectionView 根据内容动态单元格高度 | Pinterest 布局
- json - 可以在 Go 中获取 JSON 的值
- javascript - JavaScript 将所有嵌套对象属性设置为 null
- python-3.x - 使用 psycopg2 调用 postgres 函数,该函数采用自定义类型的数组
- python - 创建数据框熊猫时不保留日期
- javascript - Vue.js - 如何在数组对象上实现计算属性?
- c# - Dapper 无法从 SELECT CASE 查询中找到 POCO 映射
- javascript - 如何获取 OpenUI5 绑定信息