我应该如何在后续登录时更新user.profile(类似于Accounts.onCreateUser)?

时间:2013-08-20 04:55:31

标签: javascript meteor

我一直在使用经过精彩的EventedMind Customizing Login截屏视频广播的修改版本在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或其他东西......

我可以使用一些检查和/或客户端代码来计算两种方法,但我想知道是否已经存在的服务器挂钩更干净。

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

提前致谢。

1 个答案:

答案 0 :(得分:1)

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

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

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