在Meteor中更新外部身份验证源的属性

时间:2013-07-29 07:32:07

标签: meteor accounts

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

1 个答案:

答案 0 :(得分:0)

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

首先,您需要一些可以告诉用户何时登录的内容。目前您可以使用基于客户端的解决方案(在成功登录时第二次调用服务器),使用类似{{3}的内容或者通过编辑核心包并将它们放在/packages目录中。

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

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}});
   }
}

在上面的示例是使用fbgraph节点模块(您需要安装)的facebook - 或使用描述meteor-prescence的方法来使用没有单独包的Npm模块。对于其他提供商,您原则上也可以这样做。请注意,您不必在此处向提供商使用同步类型调用,因为可以在数据登录后立即更新数据。

您可以加入的另一个地方也在_setUserId包中的livedata方法中。