我有一个带有多阶段注册过程的Meteor应用程序。帐户基于accounts-password
包。在创建帐户之前的步骤中,用户需要提供一些配置文件信息。
我希望用户能够启动Facebook OAuth流程,该流程会使用从Facebook提取的信息预先填充个人资料字段。
这一切都需要在帐户创建之前进行。我希望使用支持facebook
的{{1}}包来实现此功能。
目前我通过致电accounts-facebook
了解了OAuth流程,但我不确定如何从返回的凭据令牌中获取OAuth访问令牌。我怀疑我需要将它传递给服务器并进行API调用以获取访问令牌。
非常感谢任何关于它应该如何工作的指示。
Facebook.requestCredential
谢谢, 克里斯
答案 0 :(得分:2)
我遇到了将credentialToken
转换为accessToken
的麻烦,只有Github。我已经写了gist,其代码应该非常相似。基本上,有两个步骤:
Facebook.requestCredential
回调函数中,调用OAuth._retrieveCredentialSecret(tokenOrError)
,其结果为credentialSecret
。然后使用Meteor.call
,传入tokenOrError
和credentialSecret
,拨打您在下一步中设置的Meteor.method
。代码(在客户端上):
Github.requestCredential({
loginStyle: 'popup',
requestPermissions: ['gist']
}, function(tokenOrError) {
if (tokenOrError && tokenOrError instanceof Error) {
// Throw a Meteor error
console.log('error getting the token');
return;
}
var credentialSecret = OAuth._retrieveCredentialSecret(tokenOrError);
Meteor.call('getGithubAccessToken', tokenOrError, credentialSecret, function(err, accessToken) {});
});
Meteor.method
,用于credentialToken
和credentialSecret
,然后拨打Facebook.retrieveCredential
。此函数从_pendingCredentials
Mongo集合中返回凭证对象,然后从集合中删除它。访问令牌为credentials.serviceData.accessToken
。凭证对象可能会保留在Meteor.users
集合中的用户对象中(就像在accounts
包中一样)或发送回用户。代码(在服务器上):
Meteor.methods({
getGithubAccessToken: function(credentialToken, credentialSecret) {
var credentials = Github.retrieveCredential(credentialToken, credentialSecret);
console.log('accessToken:', credentials.serviceData.accessToken);
return credentials.serviceData.accessToken;
}
});
我不熟悉Facebook的图谱API的细节,因此在完成这些步骤后,您就可以自己动手了。祝你好运!