node.js - req.user 是否应该将所有用户信息存储在 Express 应用程序中
问题描述
我正在使用 Express、express-session 和 passport 设置会话登录。
在我去的护照文件中,我看到了这个例子: http: //www.passportjs.org/docs/profile/
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
另外,我正在关注本教程:https ://github.com/bradtraversy/node_passport_login
现在根据这些示例 deserializeUser 将用户信息存储在req.user
. 但是,我看到整个user
都被存储了,这让我感到困惑,因为这也存储了对象的密码。
那不是很危险吗?或者可能无法req.user
从前端访问?
解决方案
假设你的后端服务器没有被入侵,只会留在你的后端,这应该是一个受信任的环境,并且默认情况下req.user
不会被发送回你的客户端。res
此外,存储在其中的任何内容req
都只能在请求本身中使用,另一个请求将有自己的req
实例,因此数据不会共享并且不应泄漏给另一个请求,除非故意这样做。
但是,您应该始终保持警惕,记住要测试并确保发送回您的客户的所有数据中不包含任何敏感信息(例如密码、令牌)。
如果您不习惯将其存储在 中req.user
,您可以随时添加一层中间件以在到达控制器之前剥离敏感信息。这样,使用中间件的路由不会暴露敏感信息。
推荐阅读
- ios - Swift 4.2 Segues:视图控制器堆叠而不是替换?
- google-cloud-storage - 谷歌云存储:更改存储桶区域
- javascript - 是否可以在 python 中导入 javascript 程序?
- c# - 取消任务中使用的取消令牌的正确方法是什么?
- reactjs - ReactJs:将数据获取代码或副作用移动到 componentDidUpdate
- python - 如何对具有多个字符串的数据框列进行热编码?
- html - 如何在Angular应用程序中允许基本的自定义样式避免innerHTML
- php - HTML FORM 重定向一个输入值,并处理其他输入值
- android - 是否可以知道用户是否选择在 Android 上取消日历事件插入?
- .net - Entity Framework 6.3 as a Service 和 .Net Core 3