我有一个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);
}
});
答案 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);
}
});