我想让我的用户在注册过程后自动登录他们的帐户。由于我使用的是alanning:roles包,我需要在服务器上创建用户才能应用角色。
在我的Meteor方法中,我有以下帐户代码:
createClient: function (user) {
if (Meteor.isServer) {
check(user, {
firstName: String,
lastName: String,
email: String,
phone: String
});
var newUser = Accounts.createUser({
email: user.email,
password: user.password,
profile: {
firstName: user.firstName,
lastName: user.lastName,
phone: user.phone,
created: new Date()
}
});
Roles.addUsersToRoles(newUser, ['client']);
return Meteor.users.findOne(newUser);
}
}
然后,在回调中,我登录用户:
Meteor.loginWithPassword(newUser._id, newUser.profile.tempPassword, function (error) {
Router.go('thenextpage');
});
当我执行此操作时,它会转到下一页,但不会将用户登录。有时,我在浏览器控制台中收到错误消息:error logging in with token: Error: You've been logged out by the server. Please log in again. [403]
关于如何使这项工作的任何想法?
答案 0 :(得分:1)
为什么不在客户端上创建帐户,然后在服务器上使用Accounts.onCreateUser
添加角色:
//客户端
Accounts.createUser({
email: user.email,
password: user.password,
profile: {
firstName: user.firstName,
lastName: user.lastName,
phone: user.phone,
created: new Date()
}
}, function(err) {
console.log(err);
});
//服务器端:
Accounts.onCreateUser(function(options, user) {
user.roles = ["client"];
if (options.profile)
user.profile = options.profile;
return user;
});
所以我们如何直接分配client
角色。只要Meteor.roles
集合中存在该角色,您就不会遇到问题&不必致电Roles.addUsersToRoles
。