Accounts.OnCreateUser()未触发

时间:2013-03-06 23:29:42

标签: meteor

我正在关注这个关于自定义登录的精彩教程,作为这篇文章的答案 - 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/

2 个答案:

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