【问题标题】:Updating attributes from external authentication source in Meteor在 Meteor 中从外部身份验证源更新属性
【发布时间】:2013-07-29 07:32:07
【问题描述】:

This screencast 展示了如何从外部身份验证中检索其他用户配置文件属性。但我不明白每次用户使用可能更新的配置文件属性登录时如何更新用户帐户? onCreateUser 是在每次用户进行身份验证时调用还是只是第一次调用?据我了解,这只是第一次。那么如何挂钩登录过程来更新属性呢?

【问题讨论】:

  • 如果我错了,请纠正我:不是所有与用户相关的操作都写入您可以观察到的“用户”集合吗?
  • @imslavko:问题是当他的个人资料@Facebook / Twitter / 等发生变化时如何更新用户个人资料。
  • 您是否尝试过从 onCreateUser 中删除 Meteor.http.get 调用并将其添加到用户登录后运行的帮助程序中?

标签: meteor accounts


【解决方案1】:

您需要在有人登录时挂钩,然后手动更新属性。

首先,您需要知道用户何时登录的信息。目前,您可以使用基于客户端的解决方案(在成功登录时第二次调用服务器),使用类似meteor-prescence 或通过编辑核心包并将它们放在您的/packages 目录中。

使用文件accounts-server.js 更改accounts-base 包以在用户登录时创建一个“挂钩”

Meteor.methods({
    login: function(options) {
    .....
    if (result !== null)

        //Run here

        this.setUserId(result.id);
        return result;
    },
});

然后在//Run Here 添加一个连接到 facebook 并获取所需数据的函数。或者在 Meteor.call 方法中,如果您决定使用 meteor-prescence 或类似的库或方法,您将从客户端调用。应该是这样的:

if(Meteor.user().services.facebook.accessToken) {
    var graph = Npm.require('fbgraph');
    graph.setAccessToken(Meteor.user().services.facebook.accessToken);  
    graph.get('/me',{},function(err,result) {

        //Update your user (you could also alter services.facebook instead
        Meteor.users.update(Meteor.userId, {$set: {profile:result}});
   }
}

在上面的示例中,facebook 使用了fbgraph 节点模块(您需要安装它) - 或者使用here 描述的方法来使用没有单独包的 Npm 模块。原则上您也可以对其他提供商进行同样的操作。请注意,您不必在此处对您的提供者使用同步类型调用,因为可以在他们登录后不久更新数据。

另一个可以挂钩的地方也是livedata 包中的_setUserId 方法。

【讨论】:

    猜你喜欢
    • 2013-11-02
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多