我正在关注这个关于自定义登录的精彩教程,作为这篇文章的答案 - http://goo.gl/VLO34 - 但它对我不起作用。
我逐字复制了所有文件,甚至添加了补充智能包,例如下划线_.pick
和http Meteor.http.get
,以防它被要求,并被错误地遗漏。
Anyhoo - 我得到github来授权我的应用,但是Web控制台中的Meteor.users和本地mongo实例上的db.users.findOne()
显示Accounts.OnCreateUser()
没有向我的用户个人资料添加任何新信息[我从github拉进来]。换句话说,{{currentUser.profile.avatar_url}}
和{{currentUser.profile.login}}
不会在该教程之后显示任何内容。所以我在屏幕上得到空白信息。
我尝试了首次尝试的截屏视频,并注意到{loginButtons}}
返回{{currentUser.profile.login}}
的值。我已经多次查看过有关拼写错误的代码,但感觉Accounts.onCreateUser(fn)
...
我正在使用Meteor 0.5.7,如果有其他人在截屏后遇到此问题,请告诉我。谢谢,
编辑:我已将项目部署到 - http://rptest-customlogin.meteor.com/。
答案 0 :(得分:5)
这里的截屏视频的作者。截至几秒钟前,您网站上的新用户:-)。因此,看起来登录正在您的网站上运行。但我猜你的应用程序中发生的事情是,在呈现时或者当您打印到控制台时,登录信息仍然无法使用。原因是所有信息都是异步填充的。该过程需要几秒钟才能完成。如果您依赖于模板中的Meteor.user()。配置文件数据,则需要先检查登录过程是否仍在进行中。
为此,您可以使用Meteor.loggingIn()
javascript函数或{{#if loggingIn}}
句柄块帮助程序。该功能是"反应"这意味着一旦结果从true
更改为false
,您的UI就会更新。所以模板可能看起来像这样:
<template name="loginDependentWidget">
{{#if loggingIn}}
Logging In
{{else}}
{{currentUser.profile.avatar_url}}
{{/if}}
</template>
这有帮助吗?
答案 1 :(得分:1)
可能是拼写错误但Accounts.OnCreateUser(fn);
应为Accounts.onCreateUser(fn);
Meteor docs:http://docs.meteor.com/#accounts_oncreateuser
然后关于同一主题的另一篇文章: Meteor login with external service: how to get profile information?
编辑: 由于下面一段代码的格式化而发布为编辑。 与此同时,我使用这段代码在我自己的项目中运行它:
Accounts.onCreateUser(function(options, user) {
if(!options || !user) {
console.log('error creating user');
return;
} else {
if(options.profile) {
user.profile = options.profile;
}
}
return user;
});
哪个工作正常。您是否已将Accounts.onCreateUser();
放在服务器上?