流星注册和分配角色错误

时间:2015-11-30 21:18:21

标签: meteor

我有一个Meteor应用程序,我正在尝试注册用户并指定一个角色:

在客户注册文件中,我的用户有电子邮件,密码,用户名,个人资料(名字和姓氏)和角色:

 Accounts.createUser(user, user.roles, function(error){
   if(!error) {
     FlowRouter.go('home');
     console.log("Registration successful");
   }
   else {
     FlashMessages.sendError(error.reason);
     console.log("Registration not successful: " + error.reason);
   }
 });

然后在服务器文件中我有:

Accounts.onCreateUser(function(options, user) {
    if(options.roles) {
        user.roles = options.roles;
        Roles.addUsersToRoles(user._id, user.roles);
    }
    return user;
});

使用此代码,我总是会收到一条错误消息:

Exception in delivering result of invoking 'createUser': TypeError: options.userCallback.apply is not a function
    at http://localhost:3000/packages/accounts-base.js?7dabd814506e384c709f8bf707377955f9814129:612:26
    at http://localhost:3000/packages/underscore.js?46eaedbdeb6e71c82af1b16f51c7da4127d6f285:794:19
    at loggedInAndDataReadyCallback (http://localhost:3000/packages/accounts-base.js?7dabd814506e384c709f8bf707377955f9814129:708:7)
    at null._callback (http://localhost:3000/packages/meteor.js?9730f4ff059088b3f7f14c0672d155218a1802d4:999:22)

用户确实成功添加了!

编辑:修复

在服务器端:

Accounts.onCreateUser(function(options, user) {
    if (options.profile) {
        user.profile = options.profile;
    }
    if(options.roles) {
        user.roles = options.roles;
        Roles.addUsersToRoles(user._id, user.roles);
    }
    return user;
});

在客户端:

Accounts.createUser(user, function(error){
                if(!error) {
                    FlowRouter.go('home');
                }
                else {
                    FlashMessages.sendError(error.reason);
                }
            });

1 个答案:

答案 0 :(得分:1)

您正在onCreateUser中向用户添加角色。此时尚未在集合中插入用户对象。 另一句话:您将user.roles作为第二个参数传递给createUser。根据Meteor文档,您只能传递选项和回调。见http://docs.meteor.com/#/full/accounts_createuser

可能会改为:

Accounts.createUser(user, function(error){
  if(!error) {
    Roles.addUsersToRoles(user._id, user.roles);
    FlowRouter.go('home');
    console.log("Registration successful");
  } else {
    FlashMessages.sendError(error.reason);
    console.log("Registration not successful: " + error.reason);
  }
});