【问题标题】:Accounts.createUser() is returning undefined on clientAccounts.createUser() 在客户端返回未定义
【发布时间】:2015-03-19 19:32:31
【问题描述】:

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

我通过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() 函数。

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

【问题讨论】:

  • 帮我一个忙,用这个callback function知道错误出在哪里,Accounts.createUser({username: username, password: password},function(error,result){if(error){console.log(error.reason}});
  • 有趣的错误Signups forbidden。看起来一些未使用的帐户-ui(流星)包是问题所在。删除了它们。感谢有错误的黑客。

标签: meteor


【解决方案1】:

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!');
});

【讨论】:

  • 我在寻找手动创建用户时如何进行回调的示例。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-18
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
相关资源
最近更新 更多