【问题标题】:Is Facebook long-lived access token usable on multiple users?Facebook 长期访问令牌是否可用于多个用户?
【发布时间】:2013-04-22 06:04:30
【问题描述】:

我正在试验 Facebook 的长期访问令牌,我发现长期访问令牌可用于不同的用户。这正常吗?

我正在使用 Facebook PHP SDK v3.2.2 和 Yii。这是我从App_User_1生成长期访问令牌的代码

Yii::import('application.vendors.facebook.Facebook');
$facebook = new Facebook(
    array(
        'appId' => Yii::app()->params['facebookApi'],
        'secret' => Yii::app()->params['facebookSecretCode'],
        'cookie' => true,
    )
);
$loginUrl = $facebook->getLoginUrl(array('display' => 'touch', 'scope' => 'publish_actions'));
$fbUser = $facebook->getUser();
if(!empty($fbUser))
{
    $facebook->setExtendedAccessToken(); //long-live access_token 60 days
    $access_token = $facebook->getAccessToken();
    exit(print_r($access_token));
}

这是我测试发布到 App_User_1 的 Facebook 墙的代码。

$message = "A message";
$link = "http://www.alink.com";
$picture = "http://www.alink/image.png";
$sendTo = "`**App_User_1**`";
$access_token = "xxxxxxxxxx";

Yii::import('application.vendors.facebook.Facebook');
$facebook = new Facebook(
    array(
        'appId' => Yii::app()->params['facebookApi'],
        'secret' => Yii::app()->params['facebookSecretCode'],
        'cookie' => true,
    )
);

$attachment = array('message' => $message, 'link' => $link, 'picture' => $picture );
$api = "/$sendTo/feed/?access_token='.$access_token,";
$result = $facebook->api($api,'post', $attachment);

我有 2 个测试应用用户。如果我替换 App_User_1 的访问令牌,我也可以发布到 App_User_2 的 Facebook 墙。这正常吗?

【问题讨论】:

  • 如果发帖是指以用户 app_user_1 的身份发帖到 app_user_2 的墙上,那么可以。
  • 嗨@JoachimIsaksson,如果我错了,请纠正我。但是,对于每个用户来说,长期访问令牌不是唯一的吗?谢谢。
  • 是的,但是 app_user_1 可以在 app_user_2 的墙上发帖,如果他们是朋友的话。至少我的朋友每年都会为我的生日发帖;)
  • 通过 PHP sdk 发布到朋友墙已在 2 月 6 日迁移中贬值。请查看developers roadmap
  • @JoachimIsaksson 不是真的。 app_user_1 根本不是 app_user_2 的朋友。我所做的是以 app_user_1 身份登录并获取他的长期访问令牌,然后注销。使用 app_user_1 的长期访问令牌,我可以将 app_user_1 的墙和 app_user_2 的墙作为应用发布。这就是我觉得奇怪的地方。

标签: php facebook yii facebook-php-sdk


【解决方案1】:

我想我可能做错了。使用 PHP SDK,api 方法无法将 access_token 识别为其路径参数的一部分。 (e.g. /me/feed/?access_token=blah)

相反,访问令牌应在可选参数下以数组格式指定。

这是我的工作方式。

$facebook_uid = '1234567890';
//Initialize array for the params parameter
$fb_data = array();
$fb_data['access_token'] = 'xxxxxxxxxx';
$fb_data['message'] = 'A test message';
$facebook->api('/'.$facebook_uid.'/feed/', 'post', $fb_data);

尝试将访问令牌与其他应用用户的访问令牌交换,并且根本没有指定 access_token。两者都会导致错误 (#200) 用户尚未授权应用程序执行此操作。

我还建议使用 Facebook 的此工具来验证您的应用程序是否正确生成了 access_token。 https://developers.facebook.com/tools/debug

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 2018-09-07
    • 2012-02-19
    相关资源
    最近更新 更多