Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Meteor用户属性未定义_Javascript_Mongodb_Meteor - Fatal编程技术网

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进行筛选。