在遵循了许多无效的教程(grrr ...)之后,我终于让 JWT 身份验证正常工作了。我可以添加一个用户,然后使用 Postman 登录并获取 JWT 字符串。我可以将它添加到我的标题并从数据库中返回值。耶!
但是,虽然这可以让我验证用户使用该站点的身份,但它并没有限制内容(目前)。这是我的挑战...
给定一个 JWT 字符串,我如何获取与其相关的用户的用户 ID,以便我可以在我的 SQL 查询中传递它并根据用户限制结果?
现在,以下工作:
router.get('/log', passport.authenticate('jwt', { session: false}), function(req, res) {
var token = getToken(req.headers);
if (token) {
db.sequelize.query(`
SELECT * FROM json_log(:vuserId)
`,
{
replacements: {vuserId: req.body.vuserId},
type: sequelize.QueryTypes.SELECT
}
)
.then((changes) => res.status(200).send(changes))
.catch((error) => { res.status(400).send(error); });
} else {
return res.status(403).send({success: false, msg: 'Unauthorized.'});
}
});
如果我在 get 请求的正文中传递以下内容:
{
"vuserId": 1
}
但是鉴于我在 header 中传递 JWT,这肯定可以告诉我用户 ID 是什么?
最佳答案
好的,经过更多搜索,我找到了答案。我添加了“npm install atob”,然后将以下内容放在页面顶部:javascript const atob = require('atob');并在 'if (token) {' 行之后添加以下行: javascript var decodedValue = JSON.parse(atob(token.split('.')[1])) 然后我可以在适当的位置引用 'decodedValue.id'请求正文中的“1”。
关于postgresql - 如何使用 node 和 express 从 JWT 身份验证中获取用户详细信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57440845/