如何使用身份validation令牌访问用户数据

我想了解基于令牌的身份validation策略如何使用令牌(例如:JWT)来访问特定于用户的数据。 我在search结果中看到的所有内容都是用户提供用户名和密码的部分,随后每个后续的调用创build并validation令牌。

不要说我有两个MongoDB集合的Node.JS服务: 用户UserMessagesUserMessages中的每个条目都包含一个UserID和一个Message

如果经过身份validation的用户想要查看与该用户有关的所有消息,我如何(以编程方式)知道如何过滤正确的消息? 我如何使令牌和用户身份 (例如UserID或其他任何有助于识别用户的身份)之间的关联,以便在下一步中查询消息集合?

我只是想了解这个概念。 我找不到任何地方的代码中获得用户身份的明确例子。 例如 :

apiRoutes.use(function(req, res, next) { var token = req.body.token || req.param('token') || req.headers['x-access-token']; if (token) { jwt.verify(token, app.get('superSecret'), function(err, decoded) { if (err) { return res.json({ success: false, message: 'Failed to authenticate token.' }); } else { req.decoded = decoded; next(); } }); } }); 

JWT包含一个有效载荷。

通常情况下,您将用户的ID放在此有效内容中。 你可以把任何你喜欢的东西放在那里,但是因为令牌是在每个请求上发送的,所以你想保持有效负载很小。 而且,由于JWT是基于64编码的,所以任何人都可以解码令牌并查看有效载荷的内容。

但是,因为只有你的服务器知道JWT的“秘密”,所以没有人能够改变有效负载或者创build一个虚假的JWT …你的服务器会认为这个标记是无效的。

上面的代码似乎是解码有效载荷并将其存储在req对象上。 当它解码JWT时,它也validation签名,所以如果解码成功,你可以信任有效载荷中的数据。 现在,您可以使用有效载荷中的用户标识来获取所需的数据。