DC3*_*314 5 node.js jwt mean-stack
我正在使用 Mean 堆栈构建一个抽认卡应用程序,并尝试模仿本教程https://thinkster.io/mean-stack-tutorial#wiring-everything-up中遵循的过程。
当新用户注册时,我想在用户对象中返回该用户的信息:正在研究的当前和最近的抽认卡,正在研究的当前和最近的卡片等。
我的问题是这些信息中有多少应该进入 JWT 有效负载?
在 thinkster.io 教程中,JWT 的负载仅包含 user_ID、用户名和到期日期。我担心额外的信息是否不应该进入 JWT,因为它会使 JWT 变得太大。那么我是否只是将 JWT 与用户对象一起发回,该对象在使用 mongoose.save 方法保存用户后返回?这个策略听起来很像以下引述:
https://auth0.com/blog/2014/01/27/ten-things-you-should-know-about-tokens-and-cookies/#token-size
每次发出 API 请求时,您都必须在 Authorization 标头中发送令牌。
根据您在该令牌中存储的信息量,它可能会变大。另一方面,会话 cookie 通常只是一个标识符(connect.sid、PHPSESSID 等),其余内容位于服务器上(如果您只有一台服务器,则在内存中;如果您在服务器上运行,则为数据库)农场)。
现在,没有什么可以阻止您使用令牌实现类似的机制。令牌将包含所需的基本信息,并且在服务器端,您可以在每个 API 调用中使用更多数据来丰富它。这与 cookie 的作用完全相同,不同之处在于您有额外的好处,即现在这是一个有意识的决定,您拥有完全的控制权,并且是您代码的一部分。
我试图从 thinkster.io 模仿的 /register 路由代码如下:
router.post('/register', function(req, res, next){
if(!req.body.username || !req.body.password){
return res.status(400).json({message: 'Please fill out all fields'});
}
var user = new User();
user.username = req.body.username;
user.setPassword(req.body.password)
user.save(function (err){
if(err){ return next(err); }
return res.json({token: user.generateJWT()})
});
});
Run Code Online (Sandbox Code Playgroud)
我可以编辑底部的保存方法部分,使其看起来像这样:
user.save(function (err, user){
if(err){ return next(err); }
return res.json({token: user.generateJWT(),
user: user})
});
Run Code Online (Sandbox Code Playgroud)
还是应该将所有额外的用户信息都放入 JWT 中,而只有 JWT 被传回?
您需要根据您的安全需要来使用。
例如,对于我的应用程序,我确实遵循您的示例。令牌存储在客户端 cookie 中,在身份验证中,我做了一件事:
相同的用户信息可以在 API 调用中公开。需要注意的一件重要的事情是我的系统不需要总是更新和同步。因此,我的客户端用户只会在登录时和特定的 GET 请求时获取用户数据。
您不需要在 JWT 中混合大量垃圾。它还需要解码。
| 归档时间: |
|
| 查看次数: |
2140 次 |
| 最近记录: |