return_to与返回URL不匹配 - 升级openid库后

时间:2012-10-16 04:41:53

标签: php drupal-6 openid google-openid

我已将PHP从版本 5.2 升级为 5.3 。然后将OpenId和库从 2.1.2 升级到 2.2.2 。并将Yadis更新为最新版本。在升级之前,OpenId登录正在运行。基础 CMS Drupal 。 现在我在返回的终点得到Auth_OpenID_FailureResponse

我的代码如下所示:

include 'common.php';
$consumer = getConsumer();
$response = $consumer->complete( BASE_URL . '/google/return' . urlencode($ext_param));

if( $response->status == Auth_OpenID_SUCCESS ){
    echo "Successful status";
} else {
    print_r( $response );
}

跟踪如下所示(删除了原始域名):

Auth_OpenID_FailureResponse Object (
    [status] => failure 
    [endpoint] =>
    [identity_url] =>
    [message] => return_to does not match return URL. Expected http://xxx.xxxxx.com/ \ 
      openid/google/return?from=accounts.google.com&janrain_nonce= \
      2012-10-16T03%3A54%3A37Zudn8eJ, got http://xxx.xxxxx.com/openid/google/return? \
      from=accounts.google.com&janrain_nonce=2012-10-16T03%3A54%3A37Zudn8eJ
    [contact] =>
    [reference] => 
) 

这对我来说很奇怪,因为代码未被修改但是库和PHP版本已升级。我在网上搜索任何问题并阅读文档。

我是否遗漏了任何东西或者必须为升级做额外的工作?

2 个答案:

答案 0 :(得分:0)

我能够自己解决这个问题。根本原因是 Drupal 当前路径变量$_GET['q'],因此它从$_GET参数数组中删除,这使得OpenId返回端点进程成功。

OpenID返回端点中的代码:

function handle_openid_return () {
    // unset the parameter 'q' from $_GET
    unset($_GET['q']);
    // Include
    include 'common.php';
    // Get the OpenID consumer
    $consumer = getConsumer();

    $response = $consumer->complete( BASE_URL . '/google/return' . urlencode($ext_param));

    // Check the status of the $response object, for successful OpenID call
    if ($response->status == Auth_OpenID_SUCCESS) {
        ...
    } else {
        ...
    }
}

答案 1 :(得分:0)

我在Drupal 6中使用最新的php-openid遇到了同样的问题。在调用q=之前,我必须从$_SERVER['QUERY_STRING']中删除getConsumer()参数。