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



我一直在浏览Accounts包,使用了一个非常棒的EventedMind自定义登录屏幕广播的修改版本。

我将其修改为使用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什么的。。。

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

关于处理这种情况的最干净的方法,有什么建议吗?

提前谢谢。

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

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

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

相关内容

最新更新