Javascript Meteor用户属性未定义
用户Javascript Meteor用户属性未定义,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,用户waitOna数据订阅: waitOn: function(){ if(Meteor.user()){ var current_user_admin_status = Meteor.user().admin; console.log(current_user_admin_status); return Meteor.subscribe('users', current_user_admin_status); } } 但是cur
waitOn
a数据订阅:
waitOn: function(){
if(Meteor.user()){
var current_user_admin_status = Meteor.user().admin;
console.log(current_user_admin_status);
return Meteor.subscribe('users', current_user_admin_status);
}
}
但是current\u user\u admin\u status
始终返回null
,即使我可以进入数据库并找到admin
字段
db.users.find({“\u id”:“6Mqx5Ky92bZfhaX8A”},{“admin”:1})
{“_id”:“6Mqx5Ky92bZfhaX8A”,“admin”:true}
我在客户机上定义了这个变量,如果当前用户是管理员,则传递给服务器以仅发布用户集合,但它总是被null
if else
语句捕获
Meteor.publish('users', function(current_user_admin_status){
if(!this.userId){
console.log('you are not signed in');
}
else if( current_user_admin_status = 'null' ){
console.log('you are not an admin');
} else if ( current_user_admin_status = 'false' ) {
console.log('you are not an admin');
} else if (current_user_admin_status = 'undefined'){
console.log('you are not an admi');
} else {
console.log('you are logged in as an admin');
return Meteor.users.find({}, {fields: {createdAt: 1, admin: 1, emails: 1, username: 1, first_name: 1, last_name: 1}});
}
});
这里有几个要点需要注意。首先,关于问题注释,除非您添加了特定的
允许/拒绝
规则以防止对其进行编辑,否则在user.profile
中添加管理员字段是不安全的。请参阅中的第一点。默认情况下,user.profile
字段可由其用户编辑,通常您应将敏感字段(如admin)存储在其外部
其次,您没有在客户端上接收到user.profile.admin
的最可能原因是您没有发布它。您应该首先为登录用户创建一个发布,以便将注释中注明的默认字段之外的字段发送给用户
最后,有一个用于处理授权的优秀且广泛使用的包,
角色
,它已经解决了上述安全问题。我建议使用:我不是100%,但我猜其他字段不会放入用户函数/对象中。尝试将您的管理字段移动到配置文件prop-Meteor.user().profile.isAdmin
,这就是我获取我的配置文件的方式。默认情况下,我的用户集合没有配置文件字段,请查看Meteor.user()
:“默认情况下,服务器发布用户名、电子邮件和配置文件(可由用户写入)。有关用户文档中使用的字段的更多信息,请参见Meteor.users。“根据我刚才做的一个小调查,您必须编辑帐户ui包以更改对象,否则您必须单独查询其他字段。您在哪里写入了配置文件字段?我将注册时的字段设置为默认值false。如果更新配置文件字段,它将自动发布到currentUser。其中的任何内容都可以由该用户编辑。只要你不使用模式,你就可以更新你的帐户来添加profile.admin
谢谢你指出这一点。我会犯一个可怕的错误。我确实明确拒绝所有更新,但我不知道它在没有关闭调用的情况下是可编辑的。我已将我的角色移动到一个单独的集合,现在按id进行筛选。