[英]PHP-SDK Facebook auth keeps redirecting
我正在嘗試將Facebook集成到我正在開發的Web應用程序中。 我從Facebook獲得了api密鑰和秘密密鑰,並將站點網址設置為http://www.mysite.com/something/app/
來自http://www.mysite.com/something/app/signup/xxxx/的以下代碼用於檢測用戶是否已連接:
$facebook = new Facebook(array(
'appId' => FB_APIKEY,
'secret' => FB_SECRETKEY,
'cookie' => true
));
$session = $facebook->getUser();
if($session) {
# Active session, let's try getting the user id (getUser()) and user info (api->('/me'))
try{
$uid = $facebook->getUser();
$user = $facebook->api('/me');
} catch (Exception $e){}
if(!empty($user)){
# User info ok? Let's print it (Here we will be adding the login and registering routines)
echo $user;
} else {
# For testing purposes, if there was an error, let's kill the script
die("There was an error.");
}
} else {
# There's no active session, let's generate one
$login_url = $facebook->getLoginUrl();
header("Location: ".$login_url);
}
但是問題是,當用戶被重定向到$ login_url時,它將不斷地向后重定向,從而形成無限循環。
重定向網址為: https : //www.facebook.com/connect/uiserver.php?app_id=xxxxxxxxxxx&method=permissions.request&display=page& next=http% 3A% 2F%2Fwww.something.com%2Fsomething%2Fapp%2Fsignup% 2Fxxxxx %2F&RESPONSE_TYPE =代碼&狀態= 6f51768c22974a16b5dcf4d8dc7f46df&fbconnect = 1
我在SO上以及Google上都看過其他類似的問題,並嘗試過他們的解決方案,但這並沒有幫助我。
[UPDATE]
好吧,我想我正在做某事。 如果我以其他Facebook用戶身份登錄,則不會被循環重定向。 似乎只有當我使用自己的Facebook帳戶(該應用程序的管理員)時才會發生。 但是在重定向之后,它應該正確返回getUser()。但是由於某種原因,它沒有。
有任何想法嗎? 謝謝。
我從服務器的根目錄開始從一個新的.php文件開始。 一切正常,所以我發現自己的代碼導致網頁重定向。
實際上,正是我的.htaccess文件中的mod_rewrite弄得一團糟。 不知何故,它沒有選擇FB設置的GET變量。 所以我需要弄清楚一些東西。 但是至少我現在知道是什么原因引起的。 結案!
我剛遇到同樣的問題。 當我嘗試使用與當前服務器中的另一台服務器相同的代碼(最新的FB SDK)時,發生了無限重定向循環。
當我開始調試它時,我發現原因是因為當前服務器$_REQUEST
似乎$_REQUEST
$_GET
中的值。 因此, $_GET['state']
和$_GET['code']
都不會在$_REQUEST
讀取。 在base_facebook.php
,似乎他們使用$_REQUEST
而不是$_GET
來獲取代碼和狀態值。
因此,對此的簡單解決方法是包括以下代碼:
$_REQUEST['state'] = $_GET['state'];
$_REQUEST['code'] = $_GET['code'];
在facebook SDK文件的require_once
之前。
希望這會幫助一些人!
我在這里遇到同樣的問題。 這是一個簡單的代碼,它在單個站點上運行,並且非常簡單:
@ini_set('log_errors','On'); // enable or disable php error logging (use 'On' or 'Off')
@ini_set('display_errors','On'); // enable or disable public display of errors (use 'On' or 'Off')
include_once('lib/facebook.php');
// Create our application instance
$config = array(
'appId' => 'xx',
'secret' => 'yyy'
);
$link = 'http://someurl.com';
$facebook = new Facebook($config);
// Get User ID
$user = $facebook->getUser();
if($user){ ?>
<p>logged in</p>
<?php } else {
$loginUrl = $facebook->getLoginUrl(array(
'scope' => 'manage_pages,email',
'redirect_uri' => $link,
));
echo '<a href="'.$loginUrl.'">Login with FB</a>';
}
所以id會做什么,它會顯示用戶未登錄時登錄的鏈接(或者是特定的-如果getUser()無法接收任何內容),以及帶有文本的段落(如果getUser給出了應提供的內容)。
簡單的測試將顯示一個問題。 即使授予用戶權限,通過站點url訪問它也會顯示登錄URL而不是段落。
問題出在哪兒? 在嘗試弄清楚時,我將網站的網址添加為“ Facebook上的應用”,以便可以從Facebook內部訪問它。 還有eureka,如果通過這種方式(通過Canvas Page url)進行訪問,則getUser()可以正常工作。 更重要的是,一旦您通過“畫布頁面” URL鏈接進行了訪問,然后直接訪問了站點,則getUser()也可以正常工作。
那么漁獲量在哪里? 嘗試使用瀏覽器的隱身功能時,我已經想到otu,用戶瀏覽器中存儲了一些內容。 直接從瀏覽器訪問網站(用戶已經在“畫布頁面” URL上)顯示正確的響應,而在瀏覽器上用戶沒有訪問“畫布頁面” URL時,顯示登錄URL。
因此,它暗示了問題是與瀏覽器緩存有關,Facebook在訪問整個頁面而不是Canvas頁面本身時未設置正確的方式。
有人有一個想法如何糾正僅與php sdk一起使用的問題嗎?
編輯也,當給應用程序訪問權限時,當用戶單擊登錄鏈接時,重定向將以狀態和代碼作為_GET參數返回到原始頁面。
您似乎正在使用舊版本的PHP SDK,並且該代碼應與最新版本一起使用。 將PHP SDK升級到最新版本-v3.1.1
https://github.com/facebook/php-sdk
然后該代碼應該起作用。
您是否嘗試過指定重定向uri:
<?php
$loginUrl = $facebook->getLoginUrl(
array( 'redirect_uri' => 'http://www.mysite.com/something/app/' )
);
?>
目標網址后面的腳本需要創建一個Facebook對象實例,以使用戶會話持久化。
我在某些瀏覽器上遇到了這個問題,最終由於阻止站點設置的cookie以及會話而導致了瀏覽器故障。
嘗試將其添加到您的頁面:
header('P3P: CP="CAO PSA OUR"');
(它是PHP,您也可以通過HTML在meta標記上執行此操作)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.