Meteor-Useraccounts和Accounts.onCreateUser

时间:2015-10-02 13:36:09

标签: meteor

我在Meteor webapp中使用meteor-useraccounts和alanning:角色。这个想法是用户可以注册并自动分配角色。所以我在考虑使用Accounts.onCreateUser挂钩,但是无法使用它。

Accounts.onCreateUser(function(options, user) {
    var user = user.user;
    var defaultRole = ['admin'];
            if (!user.roles){
                Roles.addUsersToRoles(user, defaultRole);
            }
});

我收到以下错误消息:

调用方法' ATCreateUserServer' TypeError:无法读取属性'角色'未定义的

似乎用户未知,因此未定义。您是否可以在创建用户时使用Meteor-useraccounts并指定角色。

新编辑:尝试了一下,下面的代码正在运行,但我并不赞成使用它,因为每次登录用户时添加角色都很奇怪:

Accounts.onLogin(function(user) {
    check(user, Object);
        var user = user.user;
        var defaultRole = ['admin'];
        if (!user.roles){
            Roles.addUsersToRoles(user, defaultRole);
        }
    return user;
});

1 个答案:

答案 0 :(得分:0)

总有很多方法可以做到这一点。其中是在创建用户之后添加角色并正式获得userId,如下所示:

var id = Accounts.createUser(
            createOptions
         );
Roles.addUsersToRoles(id, ["user","guest"]);

如果要使用钩子onCreateUser添加角色,可以扩展用户对象,如下所示:

Accounts.onCreateUser(function(options, user)
{
    if(!options || !user) {
        throw new Meteor.Error('Problem to create new user');
        return;
    }    
    var user_extend =
    {
       username: options.username,
       email: options.email,
       profile: options.profile,
       roles: ["user","guest"]
    };
    _.extend(user,user_extend);

    return user
}

我更喜欢第一种方法,因为您可以决定何时何地为该用户提供角色,因为您将这些角色设置为在您的网站上注册的每个用户。我希望它有所帮助。