2013-08-31 2 views
0

미러 api를 워드 프레스 사이트에 구현하려고하는데 로그인하고 인증을 한 후 사이트가 약 30 초 동안로드하려고 시도하고 리디렉션 루프였습니다.oauth 후 루프를 리다이렉트 한 후 워드 프레스로 미러 API를 사용합니다.

거울 API를 구현하는 방법은 oauth 및 기타 등등 필요한 PHP가있는 템플릿을 작성한 다음 레이아웃, 컨텐츠 등에 빌더를 사용하는 것입니다. 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. 사람은 인증없이 (페이지에 도착) 당신은 그렇게하기 위해 그들을 구글의 페이지로 보낸다.
  2. 그들은 그곳에서 인증을합니다. 인증 후에는 페이지로 다시 리디렉션됩니다 (OAuth 리디렉션으로 설정 한 페이지).
  3. 페이지로 돌아 가면 인증 된 것으로 확인되지 않습니다. 따라서 Google로 다시 보냅니다.
  4. Google에서 이미 인증되었음을 감지하여 OAuth 리디렉션으로 설정 한 페이지로 사용자를 유용하게 리디렉션합니다. 두 페이지 때문에 구글이 처리하는 방법을 모르는 그들을 리디렉션 또는 -
  5. GOTO 3 그것은 당신이 발생하고있는 문제 같은 소리

가 올바르게가 인증 될 때 처리하지 것입니다 당신이 잘못 조사하고 있기 때문입니다. 코드를 보지 않으면 알기가 어렵습니다.

Google+ Sign In (서버 측 흐름이 가능할 수도 있음)을 사용하여 인증을 처리하는 것이 좋습니다. 인증 완료 후 리디렉션이 필요하지 않지만 JavaScript 콜백이 있기 때문입니다.

업데이트 : 퀵 스타트 작업을 기반으로하므로 5 단계와 6 단계에 표시된대로 올바르게 리디렉션 URL을 설정해야합니다. of the Quickstart directions. 이 URL을 직접 방문하여 올바른 페이지가 호출되는지 확인할 수도 있습니다. (그리고 모든 스크립트가 아니라 올바른 스크립트인지 확인하십시오).

또한 oauth2callback.php에 디버깅을 추가하여 호출 할 대상과 호출 할 대상 (리퍼러)을 결정할 수 있습니다. 어떻게 든 oauth2callback이 "code"매개 변수로 호출되지 않는 루프에서 걸리는 것처럼 들리므로 auth 흐름의 초기 단계를 반복적으로 루프합니다.

+0

나는 PHP 빠른 시작 예제를 따르고있다. 방금 ​​전 메인 포스트에 코드를 게시했습니다. 또한, 나는 이것을 다른 사이트에서 사용하며 잘 작동한다. 그래서 혼란 스럽네. – phazedlite

+0

조사 할 것이 더 많은 것들로 답변을 업데이트했습니다. – Prisoner

0

나는이 문제가 워드 프레스라는 것을 발견했다. WordPress는 퀵 스타트 프로젝트가 많이 사용하는 '_SESSION'이라는 전역 변수의 사용을 중지합니다. 현재이 문제를 해결하기 위해 노력하고 있습니다. 누구든지 제안이 있으면 나에게 메시지를 보내거나이 밑에 편집을하십시오.

루프는 oauth2callback이 _SESSION으로 코드를 설정할 수 없기 때문에 발생하며 웹 사이트가베이스로 다시 리디렉션 될 때 사용자 ID가 없으므로 기본 리디렉션됩니다.

나를 도와 주셔서 감사합니다.