【问题标题】:How can I get the credential secret in Meteor, when I do Facebook.requestCredential on the client?当我在客户端上执行 Facebook.requestCredential 时,如何在 Meteor 中获取凭据秘密?
【发布时间】:2014-07-02 06:57:22
【问题描述】:

我正在尝试实现一个登录/链接帐户系统,就像 question 中的那样。
(向下滚动到“显式关联的方法”)

您以前可以通过以下方式获取用户的登录数据:
data = Package.facebook.Facebook.retrieveCredential(token).serviceData

现在看起来像这样retrieveCredential(token, secret)
这是发生这种情况的commit

在我打电话后,我终生无法弄清楚如何在服务器上获取凭证秘密:

Package.facebook.Facebook.requestCredential(
    requestPermissions: Accounts.ui._options.requestPermissions["facebook"]
, (token) ->
    Meteor.call "userAddOauthCredentials", token, Meteor.userId(), service, (err, resp) ->
        if err?
            Meteor.userError.throwError(err.reason)
)

【问题讨论】:

    标签: facebook-graph-api meteor facebook-oauth


    【解决方案1】:

    事实证明你现在可以这样做(在客户端):

    service = "facebook"
    Package.facebook.Facebook.requestCredential(
        requestPermissions: Accounts.ui._options.requestPermissions["facebook"]
    , (token) ->
        secret = Package.oauth.OAuth._retrieveCredentialSecret(token)
        Meteor.call "userAddOauthCredentials", token, secret, service, (err, resp) ->
            if err?
                Meteor.userError.throwError(err.reason)
    )
    

    然后在服务器上,您将需要密钥来访问用户的服务数据。

    userAddOAuthCredentials: (token, secret, service) ->
        services = Meteor.user().services
        serviceSearch = {}
        data = {}
        switch service
            when "facebook"
                if not services.facebook?
                    data = Package.facebook.Facebook.retrieveCredential(token, secret)?.serviceData
                    services.facebook = data
                    serviceSearch = {"services.facebook.id": services.facebook.id}
                else
                    throw new Meteor.Error(500, "You already have a linked Facebook account with email #{services.facebook.email}...")
        oldUser = Meteor.users.findOne(serviceSearch)
        if oldUser?
            throw new Meteor.Error(500, "Your #{service} account has already been assigned to another user.")
    
        Meteor.users.update(@userId, {$set: {services: services}})
        if data.email?
            if not _.contains(Meteor.user().emails, data.email)
                Meteor.users.update(@userId, {$push: {"emails": {address: data.email, verified: true}}})
    

    这些功能将为您获取用户的服务数据,以便您可以关联多个帐户,或对它们做任何您想做的事情。

    【讨论】:

      猜你喜欢
      • 2021-09-24
      • 1970-01-01
      • 2022-01-03
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      • 2017-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多