【问题标题】:Facebook Android SDK: Get user by app-scoped userIdFacebook Android SDK:通过应用范围的 userId 获取用户
【发布时间】:2019-01-11 07:26:07
【问题描述】:

我一直在使用 facebook android sdk 并尝试实现以下方案:

  1. 我的 Android 应用要求用户访问他的 Facebook 帐户
  2. 我收到用户访问令牌作为登录结果
  3. 我将该令牌(简单的String)传递给我自己的后端服务器
  4. 在我的服务器上,我需要找出那个用户是谁,如果我的后端服务器上有一个帐户,连接到这个用户的 facebook 帐户,让用户登录,否则显示错误消息。

我的问题是,我只能从访问令牌中检索应用范围内的userId,我的后端无法使用它来访问来自 Facebook 服务器的用户信息。我用于处理登录结果的代码非常简单:

facebookButton.registerCallback(callbackManager, object : FacebookCallback<LoginResult> {
        override fun onSuccess(result: LoginResult?) {
            //Pass token to my backend
            loginByToken(result?.accessToken?.token!!, FACEBOOK_PROVIDER)
        }

        override fun onCancel() {
            Toast.makeText(context, "Facebook login cancelled", Toast.LENGTH_SHORT).show()
        }

        override fun onError(error: FacebookException?) {
            Toast.makeText(context, error.toString(), Toast.LENGTH_SHORT).show()
        }
    })

我也在使用以下自动化方案:

那么,我的问题是如何在我的后端服务器上获取用户数据?我想如果我还为请求用户数据提供我的应用程序 ID 是有意义的,但我浏览了 facebook 文档,但没有找到任何这样做的方法

【问题讨论】:

    标签: android facebook facebook-graph-api


    【解决方案1】:

    获取用户数据的唯一方法是使用他的访问令牌。既然你把那个令牌传递给你的服务器,使用它应该没问题:

    /me?fields=id,name,...&access_token=xxx
    

    为了识别回访用户,您只需要应用范围的 id。如果您想跨不同应用识别用户:https://developers.facebook.com/docs/apps/for-business/

    【讨论】:

    • 但是我是否也应该将我的应用程序 ID 与访问令牌一起传递?因为我刚刚发现在我的情况下我应该传递访问令牌、应用程序 ID 和密钥 (developers.facebook.com/docs/facebook-login/access-tokens/…)
    • 你想把它传到哪里?在api调用中,只需要传递token,以及要获取的字段即可。和 appsecret_proof,如果你想安全的话。不是应用程序机密。
    • 我不会将秘密传递给我的服务器,它应该已经知道它,然后将它传递给 FB 服务器,但这没有必要,无论如何我也不会传递它。问题是我可能应该将 APP_ID 传递给 FB,这不是秘密。目前我只传递一个访问令牌,当我的后端尝试访问用户数据时,它说它不可用,因为用户 ID 错误
    • 您应该只将令牌传递给您的服务器。我以为你的意思是把东西传递给 facebook api。你也应该添加 appsecret_proof 。我不是在谈论应用程序的秘密。您发布的链接中对此进行了说明。关于应用程序 ID:不,您不需要。
    • 好吧,我想传递令牌就足够了,事实上我们的后端团队能够仅通过访问令牌检索用户数据,但我们需要以某种方式匹配用户,我们目前通过匹配访问令牌中的 userId 和保存在我们服务器上的 userId 列表来做到这一点。如果我们找到一对,那么我们可以让用户登录到我们的服务器(不是 Facebook 的)。但由于令牌包含应用范围的用户 ID,我们找不到匹配项
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    相关资源
    最近更新 更多