0

PHPバージョン5.2から5.3にアップグレードしました。OpenId次に、 and ライブラリを2.1.2から2.2.2にアップグレードしました。またYadis、最新のものに更新されます。アップグレード前は、OpenIdログインが機能していました。基礎となるCMSDrupalです。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 のバージョンがアップグレードされているため、これは私には奇妙に見えます。オンラインで問題を検索し、ドキュメントも読みました。

アップグレードのために何か見逃したことや、追加の作業をしなければならなかったことはありますか?

4

2 に答える 2

0

最新のphp-openidを使用したDrupal 6で同じ問題が発生しました。ただし、呼び出す前にq=パラメーターを削除する必要がありました。$_SERVER['QUERY_STRING']getConsumer()

于 2013-02-25T13:52:09.427 に答える
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 {
        ...
    }
}
于 2013-01-10T05:04:08.437 に答える