我的流星网站上有一个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
?
答案 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!');
});