Accounts.createUser()在客户端上返回undefined

时间:2015-03-19 19:32:31

标签: meteor

我的流星网站上有一个SignUp / SignIn进程。我有一个表单来注册新用户和一个表单来登录用户。

我通过

serverside上初始化用户
Accounts.createUser({username: "myusername", password: "mypassword"});

我可以通过client上的登录表单

登录我的虚拟用户
Meteor.loginWithPassword(username, password)

我不知道为什么但由于某种原因我无法在客户端创建新用户。如果我打电话

Accounts.createUser({username: username, password: password});

它返回undefined(safari)

我检查了输入字符串(用户名,密码),即使是像

这样的纯字符串也没有生成错误
Accounts.createUser({username: "test", password: "pass"});

在客户端控制台上返回undefined

我通过以下方式发布并订阅了我的用户:

服务器

Meteor.publish('users', function () {
    console.log("Server Log: publishing all users");
    return Meteor.users.find();
});

客户端

Meteor.subscribe("users");

我也可以在客户端控制台上count()用户,但我无法使用Accounts.createUser(),因此createUser()函数甚至无法在我的控制台中运行。

为什么我无法在Accounts.createUser()上使用client/console

1 个答案:

答案 0 :(得分:14)

Accounts.createUser是客户端上的异步函数,因为它需要查询服务器以确定它是否实际成功(用户名或电子邮件可能已在使用中)。异步函数的返回值始终为undefined,因此结果是预期的。

如果您从一个空项目和一个空数据库开始,您可以这样做:

Accounts.createUser({username: 'dave', password: 'password'});

将返回undefined,但随后对Meteor.userId()的调用应返回一个字符串。

为了确定呼叫是否成功,您需要提供回调:

Accounts.createUser({username: 'dave', password: 'password'}, function(err) {
  if (err)
    console.log(err);
  else
    console.log('success!');
});