2015-09-26 98 views
0

背景:使用MEAN堆栈来构建一个web应用程序,我仍然在学习。登录用户:要发送给浏览器的什么信息?

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

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

这听起来不还给我。我可能是新手,但我已经在很多教程中看到了这一点。在浏览器中使用console.log,我可以打印关于用户的所有信息,包括散列密码。我的猜测是,我应该向浏览器发送一小部分信息,然后过滤掉其余部分。

我的问题:这是安全可言,或者我只是敞开大门给黑客?

+0

你死了。应该发送的唯一数据是绝对需要的。发送多余的数据从来都不是一个好的做法,尤其是如果您不确定整个站点中存在零个XSS漏洞。 – CollinD

回答

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)); 
}); 
相关问题