我在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;
});
答案 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
}
我更喜欢第一种方法,因为您可以决定何时何地为该用户提供角色,因为您将这些角色设置为在您的网站上注册的每个用户。我希望它有所帮助。