是的,用户对象实际上是传递给浏览器的,它实际上显示在源代码中。在实践中,我部署的应用在源代码中有这个(实际数据泛化):
<!--Embedding The User Object-->
<script type="text/javascript">
var user = {"_id":"123abc456xyzetc","displayName":"First Last","provider":"local","username":"newguy","__v":0,"roles":["admin"],"email":"my@email.com","lastName":"Last","firstName":"First"};
</script>
如您所见,它实际上将用户信息转储到源代码中,这并不是开发应用程序最安全的方式。如果您在 layout.server.view.html 文件 (var user = {{ user | json | safe }};) 中注释或删除该行,那么您将无法真正登录。它会登录,然后立即将您踢出。
不过,您会注意到,在您的 config > passport.js 文件中,一些信息在被传递回浏览器之前已被删除,从第 14 行左右开始:
// Deserialize sessions
passport.deserializeUser(function(id, done) {
User.findOne({
_id: id
// The following line is removing sensitive data. In theory, you could remove other data using this same line.
}, '-salt -password -updated -created', function(err, user) {
done(err, user);
});
});
但是,如果您决定删除其他字段,请注意这可能会破坏您的应用。例如,我删除了用户 ID,我的大部分应用程序都可以正常工作,但它破坏了一些特定功能(如果我没记错的话,我相信是文章)。