如何在Meteor的服务器上创建帐户后自动登录用户?

时间:2015-01-23 05:51:39

标签: javascript meteor meteor-accounts

我想让我的用户在注册过程后自动登录他们的帐户。由于我使用的是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]

关于如何使这项工作的任何想法?

1 个答案:

答案 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