应 req.user 将所有用户信息存储在 Express 应用程序中

Should req.user store all user information in Express application

我正在使用 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 中,您可以随时添加一个中间件层以在敏感信息到达您的控制器之前去除敏感信息。这样,使用中间件的路由将不会暴露敏感信息。