2

我正在关注这个关于自定义登录的精彩教程,作为这篇文章的答案 - http://goo.gl/VLO34 - 但它对我不起作用。

我逐字复制了所有文件,甚至添加了诸如下划线_.pick和 http之类的补充智能包,Meteor.http.get以防万一,被错误地遗漏了。

Anyhoo - 我让 github 授权我的应用程序,但是 Web 控制台和db.users.findOne()本地 mongo 实例中的 Meteor.users 显示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/

4

2 回答 2

5

截屏视频的作者在这里。几秒钟前,您的网站上有一个新用户:-)。因此,看起来登录正在您的网站上工作。但我猜您的应用程序中发生的事情是登录信息在渲染时或打印到控制台时尚不可用。原因是所有这些信息都是异步填充的。该过程需要几秒钟才能完成。如果您在模板中依赖 Meteor.user().profile 数据,则需要首先检查登录过程是否仍在进行中。

为此,您可以使用Meteor.loggingIn()javascript 函数或{{#if loggingIn}}车把块助手。该功能是“反应式”的,这意味着一旦结果更改truefalse您的 UI 就会更新。所以模板可能看起来像这样:

<template name="loginDependentWidget">
  {{#if loggingIn}}
     Logging In
  {{else}}
     {{currentUser.profile.avatar_url}}
  {{/if}}
</template>

这有帮助吗?

于 2013-03-07T21:13:39.300 回答
1

可能是错字,但Accounts.OnCreateUser(fn);应该是Accounts.onCreateUser(fn); Meteor 文档:http ://docs.meteor.com/#accounts_oncreateuser

然后是关于同一主题的另一篇文章: 使用外部服务登录 Meteor:如何获取个人资料信息?

编辑:由于以下代码的格式而发布为编辑。与此同时,我用这段代码让它在我自己的项目上运行:

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();服务器上?

于 2013-03-07T07:53:06.523 回答