首页 > 解决方案 > 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从前端访问?

标签: node.jsexpresspassport.js

解决方案


假设你的后端服务器没有被入侵,只会留在你的后端,这应该是一个受信任的环境,并且默认情况下req.user不会被发送回你的客户端。res

此外,存储在其中的任何内容req都只能在请求本身中使用,另一个请求将有自己的req实例,因此数据不会共享并且不应泄漏给另一个请求,除非故意这样做。

但是,您应该始终保持警惕,记住要测试并确保发送回您的客户的所有数据中不包含任何敏感信息(例如密码、令牌)。

如果您不习惯将其存储在 中req.user,您可以随时添加一层中间件以在到达控制器之前剥离敏感信息。这样,使用中间件的路由不会暴露敏感信息。


推荐阅读