Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Meteor中的外部身份验证源更新属性_Meteor_Accounts - Fatal编程技术网

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

从Meteor中的外部身份验证源更新属性,meteor,accounts,Meteor,Accounts,显示如何从外部身份验证检索其他用户配置文件属性。但我不明白,每次用户登录时,我如何用可能更新的配置文件属性更新用户帐户?onCreateUser是每次用户身份验证时调用还是第一次调用?据我所知,这只是第一次。那么,我如何才能连接到登录过程以更新属性呢?当有人登录时,您需要连接到,然后手动更新属性 首先,您需要知道用户何时登录的信息。目前,您可以使用基于客户端的解决方案(在成功登录后第二次调用服务器),方法是使用或编辑核心包并将其放置在/packages目录中 使用文件accounts serve

显示如何从外部身份验证检索其他用户配置文件属性。但我不明白,每次用户登录时,我如何用可能更新的配置文件属性更新用户帐户?
onCreateUser
是每次用户身份验证时调用还是第一次调用?据我所知,这只是第一次。那么,我如何才能连接到登录过程以更新属性呢?

当有人登录时,您需要连接到,然后手动更新属性

首先,您需要知道用户何时登录的信息。目前,您可以使用基于客户端的解决方案(在成功登录后第二次调用服务器),方法是使用或编辑核心包并将其放置在
/packages
目录中

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

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

        //Run here

        this.setUserId(result.id);
        return result;
    },
});
然后在
//runhere
添加一个连接到facebook并获取所需数据的函数。或者在Meteor.call方法中,如果您决定使用
Meteor Presence
或类似的库或方法,您将从客户端调用该方法。这将类似于:

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
节点模块(您需要安装),或者使用描述的方法使用Npm模块,而不使用单独的软件包。原则上,您也可以为其他提供商提供相同的服务。注意:您不必在此处对您的提供商使用同步类型调用,因为这样可以在他们登录后很快更新数据


另一个你可以进入的地方是
\u setUserId
方法,它位于
livedata
包中。

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