1

我一直在使用非常棒的 EventedMind自定义登录截屏视频的修改版本在 Accounts 包中四处寻找。

我将其修改为使用 facebook 而不是 github,在尝试更新user.profile信息时我注意到了一些东西。具体来说,我正在寻找正确的方式/位置来处理对user.profile.

例如,假设我第一次以 FB 用户身份进行身份验证。当我这样做时,该CreateUser事件将触发。使用Accounts.onCreateUser(...),我可以将 FB 图中的其他信息填充到配置文件中,如下所示:

Accounts.onCreateUser(function(options,user){

var accessToken = user.services.facebook.accessToken,
    result;

result = Meteor.http.get("https://graph.facebook.com/"+user.services.facebook.username, {
    params: {
        access_token:accessToken,
        fields: ['picture', 'name','first_name','last_name','username','link','location','bio','relationship_status','email','timezone','locale']
    }
});

if (result.error){
    throw result.error;
}

user.profile = result.data; //lazily adding everything
return user;

});

这在创建用户时工作得很好。它又好又干净。

但是现在让我们说一些信息发生了变化。例如,假设个人资料图片发生了变化。如果我注销然后重新登录到流星应用程序,Accounts.onCreateUser(...)则不会触发,因为用户已经存在。它没有被再次创建,它正在被修改。

我需要更新user.profile后续登录,或者至少检查更改,然后根据需要进行修改。理想情况下,我希望以与.onCreateUser. 也许有一个.onModifyUser或什么...

我可以使用一些检查和/或客户端代码来想出几种方法来做到这一点,但我想知道是否有一个已经存在的服务器钩子会更干净。

关于处理这种情况的最干净方法的任何建议?

提前致谢。

4

1 回答 1

1

如果您手动调用登录函数,则可以将回调作为最后一个参数传递,该参数将在登录完成后在客户端上调用。请参阅:http ://docs.meteor.com/#meteor_loginwithpassword 。

Meteor.loginWithFacebook({}, function (err) { /* make a Meteor method call here */ });

目前没有记录在案的服务器端回调。

于 2013-08-20T17:24:34.917 回答