我知道我可以要求:

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

但是“ me”是指“主动用户”,大概是该机器上登录到Facebook的用户,我需要在客户端END user_id上使用Facebook用户,以便我的服务器可以向Graplapi提出请求。使用该格式的用户:

https://graph.facebook.com/USER_ID?access_token=ACCESS_TOKEN 
有帮助吗?

解决方案 2

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

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

一个人不必这样做,因为而不是要求您的应用程序将其重定向到登录页面,然后Facebook将使用access_token和user_id将签名_request重新发布。 Facebook关于授权的文档(此后似乎已更新)错误地告诉某人应用程序请求令牌,但这仅适用于网站而不是应用程序。我发现Facebook Docs如何不断地告诉其中一个很简单,但他们却没有简单地解释它并犯错...

其他提示

我想您缺少用户身份验证概念的基础知识,这不仅与Facebook有关。

让我们假设两个用户 一个 & b 参观 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 是从用户请求的 一个 (客户) 这 $facebook->api('/me'); 将持有“活跃用户”的详细信息 从该特定请求(客户端)呢和您的机器(服务器)将举行会议 全部 登录的用户!

所以每次 fb_profile.php 从一个 客户 在有效的会话中,执行的结果 $facebook->api('/me'); 将与 具体的 会话 具体的 客户!

那你在这里说了什么(在 大胆的) 是错的:

但是“我”是指“主动用户”,大概是该机器上登录到Facebook的用户 这将是服务器

顺便说一句,当您同时拥有有效的会话时:

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

和:

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top