当用户尝试更新自己的个人资料时,Meteor“更新失败:拒绝访问”?

时间:2017-11-30 06:17:52

标签: meteor

我在创建时向用户的帐户添加字段。这很好用:

Accounts.onCreateUser((options, user) => {
  user.groups = [2];
  return user;
});

我需要创建一个允许用户更改此功能的功能。当我从前端运行时,我收到错误“更新失败:访问被拒绝”

Meteor.users.update(
  { _id: Meteor.userId() },
  {
    $set: { groups: [4, 5] },
  },
);

在server / main.js中我有:

Meteor.publish('currentUser', function() {
  return Meteor.users.find({ _id: this.userId }, { fields: { groups: 1 } });
});

1 个答案:

答案 0 :(得分:0)

不要直接从客户端进行数据库更新。任何客户都不可信任。

话虽如此,有两种方法可以解决这个问题:

ONE

As per the documentation :

  

默认情况下,当前用户的用户名,电子邮件和个人资料是   发布给客户。您可以发布其他字段   当前用户:

/**
 * Don't use `return true` in production!
 * You probably need something like this:
 * return Meteor.users.findOne(userId).profile.isAdmin;
 */

Meteor.users.allow({   update:function(userId,user){     返回true;

// Client
Meteor.subscribe('userData');

} });

Meteor.method({
updateGroups: function(data){
 // make changes to the user record
});

Meteor allow rules

TWO

在服务器中定义一个流星方法,让服务器在进行一些验证后为您更新相关数据。服务器代码始终是可信任的。

<强> server.js

# Also using comprehension notation
coef = [
  getattr(olsfit.params, 'X_' + str(i))
  for i in range(4)
]