2012-10-16 2 views
0

Я модернизированная PHP от версии 5,2 к 5.3. Затем обновили OpenId и библиотеку от 2.1.2 до 2.2.2. А также обновлен Yadis до последней версии. Перед обновлением работала регистрация OpenId. Основой CMS является Drupal. Теперь я получаю Auth_OpenID_FailureResponse в возвращаемой конечной точке.return_to не соответствует URL возврата - после обновления OpenId библиотеки

Мой код выглядит следующим образом:

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 обновлена. Я искал в Интернете какие-либо вопросы и читал документацию.

Я пропустил какую-либо вещь или вам нужно сделать дополнительную работу для обновления?

ответ

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 { 
     ... 
    } 
} 
0

я столкнулся с теми же проблемами в Drupal 6 с последней PHP-OpenID. Мне пришлось снять параметр q= с $_SERVER['QUERY_STRING'], прежде чем звонить getConsumer().