0

我正在尝试将镜像 api 实现到 wordpress 站点中,但是在我登录并进行身份验证后,该站点尝试加载大约 30 秒,然后说存在重定向循环失败。

我实现镜像 api 的方式是创建一个包含 oauth 和诸如此类所需的所有 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(); ?>
4

2 回答 2

1

如果没有看到您正在使用的确切代码,很难确定,但听起来可能会发生以下情况:

  1. 一个人到达您的页面(未经身份验证),您将他们发送到 Google 的页面以执行此操作。
  2. 他们在那里进行身份验证。身份验证后,它们将被重定向回您的页面(这是您设置为 OAuth 重定向的页面)。
  3. 回到您的页面,您没有检测到它们已通过身份验证。所以你把它们发回谷歌。
  4. Google 检测到它们已经通过身份验证,因此它们有助于将它们重定向回您的页面(这是您设置为 OAuth 重定向的页面)。
  5. 转到 3

听起来您遇到的问题是您在通过身份验证时从未正确处理 - 要么是因为 Google 将他们重定向到的页面不知道如何处理,要么是因为您检查不正确。没有看到你的代码,很难说。

此外,您可能希望使用Google+ 登录(可能使用服务器端流程)来处理身份验证,因为它不需要在身份验证完成后进行重定向,而是使用 JavaScript 回调。

更新:由于您的工作基于快速入门,请确保您已正确设置重定向 URL,如快速入门指导的第5 步和第 6 步所示。您可能还想直接点击这些 URL 以确保调用了正确的页面。(并确保它是正确的脚本,而不仅仅是任何脚本)。

您可能还想在 oauth2callback.php 中添加一些调试,以确定调用它的对象以及调用的来源(引用者)。听起来它不知何故陷入了一个循环,其中 oauth2callback 永远不会使用“code”参数调用,因此它会不断地循环围绕身份验证流程的早期阶段。

于 2013-08-31T18:20:06.570 回答
0

我发现问题是WordPress。WordPress 禁止使用全局变量“_SESSION”,快速启动项目经常使用该变量。我目前正在研究解决这个问题的方法。如果有人有任何建议,请给我留言或在此下方进行编辑。

该循环是由于 oauth2callback 无法将 code 设置为 _SESSION 造成的,并且当网站重定向回 base 时,由于没有 userid ,因此 base 会重定向。

感谢你们对我的帮助。

于 2013-09-04T00:01:43.947 回答