Facebook OAuth 一次又一次地请求许可
Facebook OAuth asks permission again and again
应用一直在询问 "allow permission" 甚至以为我做到了。
我是在第一次允许权限后才访问这个 link 的,我很困惑。不应该第二次或第三次,只是将我发送到重定向 link 而不是再次询问我已经允许的权限吗?
当我点击使用 Facebook 登录时,它要求授权已经授权的用户。
我正在使用 PHP SDK 5.7.0。
当我将我的站点迁移到另一个主机时遇到了这个问题,但是我不认为这是主要问题。
注意:如果代码仅请求 "email" 权限而没有其他权限,则它可以完美运行。
配置-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;
我刚刚找到了答案。
事实上,我真的不知道为什么会这样,但是。
正如我在问题中提到的,当我添加除 "email" 之外的更多权限时会发生此问题,现在我意识到即使缺少任何权限也会发生这种情况。
我的应用程序可以访问其他权限和功能,但我没有将它们全部写在 $permission
数组中。因此,请确保您已写下 Facebook 授予您的所有权限。
这对我有用!
应用一直在询问 "allow permission" 甚至以为我做到了。
我是在第一次允许权限后才访问这个 link 的,我很困惑。不应该第二次或第三次,只是将我发送到重定向 link 而不是再次询问我已经允许的权限吗?
当我点击使用 Facebook 登录时,它要求授权已经授权的用户。 我正在使用 PHP SDK 5.7.0。 当我将我的站点迁移到另一个主机时遇到了这个问题,但是我不认为这是主要问题。
注意:如果代码仅请求 "email" 权限而没有其他权限,则它可以完美运行。 配置-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;
我刚刚找到了答案。
事实上,我真的不知道为什么会这样,但是。
正如我在问题中提到的,当我添加除 "email" 之外的更多权限时会发生此问题,现在我意识到即使缺少任何权限也会发生这种情况。
我的应用程序可以访问其他权限和功能,但我没有将它们全部写在 $permission
数组中。因此,请确保您已写下 Facebook 授予您的所有权限。
这对我有用!