记录用户:要发送到浏览器的信息是什么?

时间:2015-09-26 17:53:19

标签: javascript angularjs node.js login passport.js

背景:使用MEAN堆栈构建网络应用,我还在学习。

问题:我发现以下令人困惑。假设我有一个用户登录(我正在使用Passport.js)。从Angular我可以检索它查询我的Node.js服务器。 我现在正在做的事情类似于:

app.get('/userLogged',function(req,res){
     res.json({req.user});
});

这对我来说听起来不安全。我可能是一个新手,但我在许多教程中都看到了这一点。在浏览器中使用console.log,我可以打印有关用户的所有信息,包括哈希密码。我的猜测是我应该向浏览器发送一组最小的信息,过滤掉其余部分。

我的问题:这是安全吗,还是我只是向黑客敞开大门?

1 个答案:

答案 0 :(得分:0)

看看ViewModel的概念。它表示您希望与系统的外部用户公开共享的数据。

在您的情况下可以实现的是从内部存储的数据模型中实现正确的视图模型。说明此概念的一个简单示例是为user对象创建一个视图模型,该模型将pick您想要发回的数据:

// This function will return a different version
// of the `user` object having only a `name`
// and an `email` attribute.
var makeViewModel = function (user) {
  return _.pick(user, ['name', 'email']);
}

然后,您将能够按需构建正确的视图模型:

app.get('/user',function (req,res){
     res.json(makeViewModel(req.user));
});