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

Dud*_*ude 9 meteor

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

serverside通过用户启动用户

Accounts.createUser({username: "myusername", password: "mypassword"});
Run Code Online (Sandbox Code Playgroud)

我可以通过我的登录表单登录到我的dummyusers client

Meteor.loginWithPassword(username, password)
Run Code Online (Sandbox Code Playgroud)

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

Accounts.createUser({username: username, password: password});
Run Code Online (Sandbox Code Playgroud)

它返回undefined(野生动物园)

我检查了输入字符串(用户名,密码),即使是纯字符串也没有生成错误

Accounts.createUser({username: "test", password: "pass"});
Run Code Online (Sandbox Code Playgroud)

返回undefined客户端控制台.

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

服务器

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

客户

Meteor.subscribe("users");
Run Code Online (Sandbox Code Playgroud)

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

为什么我不能使用Accounts.createUser()client/console

Dav*_*don 16

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

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

Accounts.createUser({username: 'dave', password: 'password'});
Run Code Online (Sandbox Code Playgroud)

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

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

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