我正在使用 Accounts API 来管理用户。我的应用程序首先尝试使用他们的凭据登录用户,如果导致错误,它会使用输入凭据创建一个新的用户帐户。
// Log the user in
Meteor.loginWithPassword(username, token, function(error) {
if(error) { // create a new user account, log them in and show the page
Accounts.createUser({
username: username,
email: username + '@example.com',
password: token,
profile: {name: username}
}, showThePage);
}
else { // show the page
//showThePage();
window.location.reload();
}
});
但是这个代码块只有在用户之前从浏览器中注销时才会执行,如果是这种情况,Meteor 需要 2-3 秒才能让用户使用loginWithPassword
. 由于我使用的是 v0.5.0,所以没有Meteor.loggingIn()
.,而我唯一拥有的是Meteor.userLoaded()
. 出于某种原因,Meteor 执行了两次登录操作——一次通过加载占位符用户(仅设置了其 userId 属性),另一次通过加载实际用户。这使得 userLoaded() 返回true
两次,因此我的加载器图像无法按预期工作。
另请注意,在 loginWithPassword 内的 else 块中,我正在重新加载窗口。我有一个showThePage()
包含所有模板数据和事件绑定代码的函数。该函数使用登录用户的用户名检索数据。现在因为当 else 块中的函数执行时没有真正的用户登录(记住流星需要时间来登录用户),所以没有数据被获取。
有解决此问题的方法吗?