Facebook OAuth一次又一次地请求许可

时间:2019-07-01 19:49:59

标签: php facebook-php-sdk

应用程序一直在要求“允许权限”,即使我确实这样做了。

https://www.facebook.com/v3.3/dialog/oauth?client_id=CLIENTID&state=StateHASH&response_type=code&sdk=php-sdk-5.7.0&redirect_uri=HTTPS://MYWEB/fb-callback.php&scope=email%2Cpages_show_list%2Cpublish_pages%2Cmanage_pages

第一次允许访问权限后,我正在访问此链接,我很困惑。不应该第二次还是第三次,只是将我发送到重定向链接,而不是再询问我已获得的许可?

当我单击“使用Facebook登录”时,它要求授权已授权的用户。 我正在使用PHP SDK 5.7.0。 当我将网站迁移到另一台主机时遇到了这个问题,但是我不认为这是主要问题。

注意:如果代码正在向JUST索要“电子邮件”权限,而没有其他权限,则它可以正常工作。 config-fb.php

  if(!isset($_SESSION))
    session_start();
require_once "Facebook/autoload.php";
$FB = new \Facebook\Facebook([
    'app_id' => '{APP_ID}',
    'app_secret' => '{APP_SECRET}',
    'default_graph_version' => 'v3.3'
]);
$helper = $FB->getRedirectLoginHelper();
$permissions = ['email', 'manage_pages']; //if there is only the email permission, it works perfectly
$redirectURL = "http://localhost/fb-callback.php";
$loginURL = $helper->getLoginUrl($redirectURL, $permissions);
echo "<a href='".$loginURL."'>Login</a>";

fb-callback.php

<?php
require_once "config-fb.php";


if (isset($_GET['state'])) {
$helper->getPersistentDataHandler()->set('state', $_GET['state']);
}

try {
    $accessToken = $helper->getAccessToken();
} catch (\Facebook\Exceptions\FacebookResponseException $e) {
    echo "Response Exception: " . $e->getMessage();
    exit();
} catch (\Facebook\Exceptions\FacebookSDKException $e) {
    echo "SDK Exception: " . $e->getMessage();
    exit();
}

if (!$accessToken) {
    echo "Access token missing";
    exit();
}

$oAuth2Client = $FB->getOAuth2Client();
if (!$accessToken->isLongLived())
    $accessToken = $oAuth2Client->getLongLivedAccessToken($accessToken);

$response = $FB->get("/me?fields=id, accounts{id,name,picture,access_token}, first_name, last_name, email, picture.type(large)", $accessToken);
$userData = $response->getGraphNode()->asArray();



if(!isset($_SESSION)){
    session_start();
}

echo "Good";
//Then do something with $accessToken;

1 个答案:

答案 0 :(得分:0)

我刚找到答案。 实际上,我真的不知道为什么会这样,但是。 正如我在问题上提到的那样,当我添加除“电子邮件”之外的更多权限时会发生此问题,现在我意识到即使缺少任何权限也会发生这种情况。 为了更容易理解,我的应用有权访问其他权限和功能,而我并没有全部将它们写在$permission数组上。因此,请确保您已写入Facebook授予您的应用程序的所有权限。

这对我有用!