2013-08-31 30 views
0

我試圖實現鏡像api到一個wordpress站點,但在登錄和驗證後,該站點嘗試加載大約30秒,然後失敗說,那裏是一個重定向循環。oauth使用鏡像api與wordpress後重定向循環

我實現鏡像API的方式是創建一個模板,其中包含oauth和whatnot所需的所有php,然後使用builder作爲佈局,內容等。我認爲這可能是wordpress的一個問題,但我不想放棄希望。

謝謝您的幫助

編輯:這是我用我的WordPress的頁面模板的代碼。

<?php 
/* 
Template Name: Glass 
*/ 

require_once $_SERVER['DOCUMENT_ROOT'].'/glass/config.php'; 
require_once $_SERVER['DOCUMENT_ROOT'].'/glass/mirror-client.php'; 
require_once $_SERVER['DOCUMENT_ROOT'].'/glass/google-api-php-client/src/Google_Client.php'; 
require_once $_SERVER['DOCUMENT_ROOT'].'/glass/google-api-php-client/src/contrib/Google_MirrorService.php'; 
require_once $_SERVER['DOCUMENT_ROOT'].'/glass/util.php'; 

$client = get_google_api_client(); 
$message= ""; 
$subscriptionId; 
if(isset($_GET['message'])) 
    $message = $_GET['message']; 

if (!isset($_SESSION['userid']) || get_credentials($_SESSION['userid']) == null) { 
    header('Location: ' . $base_url . '/oauth2callback.php'); 
    exit; 
} else { 
    $client->setAccessToken(get_credentials($_SESSION['userid'])); 
} 

// A glass service for interacting with the Mirror API 
$mirror_service = new Google_MirrorService($client); 

$subscriptions = $mirror_service->subscriptions->listSubscriptions(); 
$timeline_subscription_exists = false; 
foreach ($subscriptions->getItems() as $subscription) { 
    if ($subscription->getId() == 'timeline') { 
     $timeline_subscription_exists = true; 
     $subscriptionId = $subscription->getId(); 
    } 
} 
switch ($_GET['operation']){ 
    case 'createSubscription': 
    $message = subscribe_to_notifications($mirror_service, "timeline", 
     $_SESSION['userid'], "https://mirrornotifications.appspot.com/forward? url=".$base_url."/notify.php"); 

     //Refresh Page 
    $mHeader = 'Location: ' . $base_url; 
    if($message != "") 
     $mHeader = $mHeader . '?message='.$message; 
    header($mHeader); exit; 
    break; 

    case 'deleteSubscription': 
    $message = $mirror_service->subscriptions->delete($subscriptionId); 

     //Refresh Page 
    $mHeader = 'Location: ' . $base_url; 
    if($message != "") 
     $mHeader = $mHeader . '?message='.$message; 
    header($mHeader); 
    exit; 
    break; 

    case 'refreshCard': 
    createControlCard($client); 
    header('Location: ' . $base_url); 
    exit; 
    break; 

    case 'refreshInfo': 
    generateInfoCards($client); 
    header('Location: ' . $base_url); 
    exit; 
    break; 
} 


get_header(); ?> 
<div id="content" class="widecolumn"> 
    <div id="main"> 



    </div> 
</div> 
<?php get_footer(); ?> 
+0

你可以發表一些代碼說明你是如何做到這一點? – Prisoner

回答

1

這是很難沒有看到你正在使用的確切的代碼可以肯定的,但它聽起來像什麼可能發生的是:

  1. 一個人來到你的頁面上(不認證),然後您將它們發送到Google的頁面來執行此操作。
  2. 他們在那裏驗證。經過身份驗證後,它們會重定向回您的頁面(這是您設置爲OAuth重定向的頁面)。
  3. 回到您的頁面,您不會檢測到它們已通過身份驗證。所以你把它們發回給Google。
  4. Google檢測到他們已經通過身份驗證,因此他們會將其重定向回您的頁面(這是您設置爲OAuth重定向的頁面)。
  5. GOTO 3

這聽起來像您遇到的問題是,你永遠不正確處理,當他們進行身份驗證 - 或者是因爲谷歌網頁被重定向他們不知道該如何處理這個問題,或因爲你檢查不正確。沒有看到你的代碼,很難說。

此外,您可能希望調查使用Google+ Sign In(可能與服務器端流量)來處理身份驗證,因爲它在身份驗證完成後不需要重定向,而是具有JavaScript回調。

更新:既然你的基礎上Quckstart工作,確保您設置了正確的重定向URL,在步驟5和6 of the Quickstart directions表示。您可能還想直接點擊這些網址以確保正在調用正確的網頁。 (並確保它是正確的腳本,而不是任何腳本)。

您可能還需要添加一些調試到oauth2callback.php,以確定它正在調用哪些內容以及調用來自哪裏(Referrer)。聽起來好像它在一個循環中被捕獲,不知何故,oauth2callback永遠不會被「code」參數調用,所以它在認證流程的早期階段持續循環。

+0

我正在關注php quickstart示例。 我剛剛在主帖中發佈了代碼。此外,我在我的其他網站上使用它,它工作得很好。這就是爲什麼我很困惑。 – phazedlite

+0

我已經更新了一些更多要調查的答案。 – Prisoner

0

我發現問題是WordPress。 WordPress禁用了快速啓動項目使用的全局變量'_SESSION'。我目前正在解決這個問題。如果有人有任何建議,請給我留言或在此下進行編輯。

該循環是由oauth2callback無法將代碼設置爲_SESSION引起的,當網站重定向回基地時,由於沒有用戶標識,基地址會重定向。

謝謝你幫助我。