0

我知道我可以要求:

https://graph.facebook.com/me?access_token=ACCESS_TOKEN 

但是“我”指的是“活动用户”,大概是在这台机器上登录到 facebook 的用户,这将是服务器,我需要客户端端 user_id 的 facebook 用户,所以我的服务器可以向 GraphAPI 提出关于该用户使用以下格式:

https://graph.facebook.com/USER_ID?access_token=ACCESS_TOKEN 
4

2 回答 2

0

我猜你错过了不仅与 Facebook 相关的用户身份验证概念的基础知识。

让我们假设两个用户AB访问过domain.com/fb_profile.php,其中包含(来自 PHP-SDK 的示例文件):

<?php

require '../src/facebook.php';

$facebook = new Facebook(array(
  'appId'  => 'APPLICATION_ID',
  'secret' => 'APPLICATION_SECRET',
  'cookie' => true,
));


$session = $facebook->getSession();

$me = null;
// Session based API call.
if ($session) {
  try {
    $uid = $facebook->getUser();
    $me = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    error_log($e);
  }
}

// rest of code

他们都成功登录,页面重新加载。现在发生的事情是我们对两个用户都有一个有效的会话!
fb_profile.php从用户A客户端)请求时,$facebook->api('/me');将保留来自该特定请求(客户端)的“活动用户”详细信息!并且您的机器(服务器)将为所有登录用户保留会话!

因此,每次从具有有效会话的客户端fb_profile.php请求时,执行结果将与来自该特定客户端的特定会话相关!$facebook->api('/me');

所以你在这里所说的(粗体)是错误的:

但是“我”指的是“活跃用户”,大概是在这台机器上登录到 Facebook 的用户,这台机器 将是服务器

顺便说一句,当你有一个有效的会话时:

$facebook->api('/me');

和:

$facebook->api('/USER_ID');

将返回相同的信息(当然USER_ID是在客户端登录的用户的 id)。

于 2011-01-23T16:33:08.600 回答
0

查看 SDK 的源代码,我发现他们从访问令牌中解析了 user_id:

        /*
         * access_token:
         *   1249203702|2.h1MTNeLqcLqw__.86400.129394400-605430316|-WE1iH_CV-afTgyhDPc
         *                                               |_______|
         *                                                   |
         *                                                user id
         */

但是一个人不应该这样做,因为您的应用程序应该将它们重定向到登录页面,而不是请求令牌,然后 facebook 将使用 access_token 和 user_id 重新发布签名请求。关于授权的 facebook 文档(似乎已经更新)错误地告诉应用程序请求令牌,但这仅适用于网站而不是应用程序。我发现 facebook 文档一直告诉人们它是多么简单,但他们却未能简单地解释它并且无论如何都会出错......

于 2011-01-30T06:54:53.867 回答