流星:在accounts-facebook之外实施facebook包

时间:2015-07-09 12:51:15

标签: facebook meteor oauth meteor-accounts

我有一个带有多阶段注册过程的Meteor应用程序。帐户基于accounts-password包。在创建帐户之前的步骤中,用户需要提供一些配置文件信息。

我希望用户能够启动Facebook OAuth流程,该流程会使用从Facebook提取的信息预先填充个人资料字段。

这一切都需要在帐户创建之前进行。我希望使用支持facebook的{​​{1}}包来实现此功能。

目前我通过致电accounts-facebook了解了OAuth流程,但我不确定如何从返回的凭据令牌中获取OAuth访问令牌。我怀疑我需要将它传递给服务器并进行API调用以获取访问令牌。

非常感谢任何关于它应该如何工作的指示。

Facebook.requestCredential

谢谢, 克里斯

1 个答案:

答案 0 :(得分:2)

我遇到了将credentialToken转换为accessToken的麻烦,只有Github。我已经写了gist,其代码应该非常相似。基本上,有两个步骤:

  1. Facebook.requestCredential回调函数中,调用OAuth._retrieveCredentialSecret(tokenOrError),其结果为credentialSecret。然后使用Meteor.call,传入tokenOrErrorcredentialSecret,拨打您在下一步中设置的Meteor.method
  2. 代码(在客户端上):

    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) {});
    });
    
    1. 在服务器上,设置一个Meteor.method,用于credentialTokencredentialSecret,然后拨打Facebook.retrieveCredential。此函数从_pendingCredentials Mongo集合中返回凭证对象,然后从集合中删除它。访问令牌为credentials.serviceData.accessToken。凭证对象可能会保留在Meteor.users集合中的用户对象中(就像在accounts包中一样)或发送回用户。
    2. 代码(在服务器上):

        Meteor.methods({
          getGithubAccessToken: function(credentialToken, credentialSecret) {
            var credentials = Github.retrieveCredential(credentialToken, credentialSecret);
            console.log('accessToken:', credentials.serviceData.accessToken);
            return credentials.serviceData.accessToken;
          }
        });
      

      我不熟悉Facebook的图谱API的细节,因此在完成这些步骤后,您就可以自己动手了。祝你好运!