1

CakePHP と OpenID コンポーネントを使用して Google から OpenId ユーザー属性 (名前、電子メールなど) を正常に取得するために使用できる例はありますか? 必要なパラメーターを追加しようとすると、「要求したページは無効です」というメッセージが表示されます。

もっと詳しく

コンポーネント: http://code.42dh.com/openid/

「属性」を要求しなければ、問題なく動作します。次の例のように、必須/オプション属性のリクエストを追加しようとするとすぐに、Google から「リクエストしたページは無効です」というエラーが表示されます。

例 (私にとってはうまくいきません): http://cakebaker.42dh.com/2008/02/12/using-the-openid-simple-registration-extension/

あるソースによると、問題は次のとおりです。

このエラーは、「 http://specs.openid.net/auth/2.0/identifier_select 」に設定する必要がある openid.claimed_id および openid.identity パラメータを含めないことによって文字通りトリガーされました。これらを設定すると、別のエラーが発生します。このエラーは、openid.return_to と同じ値で openid.realm にも入力することで解決できます。

Google OpenID: リクエストしたページは無効です

コード

function openidlogin() {

    $realm = 'http://' . $_SERVER['HTTP_HOST'];
    $returnTo = $realm . '/users/openidlogin';


    $url = "https://www.google.com/accounts/o8/id";
    if ($this->RequestHandler->isPost() && !$this->Openid->isOpenIDResponse()) {
        try {
            $this->Openid->authenticate($url, $returnTo, $realm); // WORKS !!!
            $this->Openid->authenticate($url, 'http://'.$_SERVER['SERVER_NAME'].'/users/login', 'http://'.$_SERVER['SERVER_NAME'], array('email'), array()); // FAILS
        } catch (InvalidArgumentException $e) {
            $this->Session->setFlash("Error: Invalid OpenId");
        } catch (Exception $error) {
            $this->Session->setFlash("Error: " + $error->getMessage());
        }
    } elseif ($this->Openid->isOpenIDResponse()) {

        $response = $this->Openid->getResponse($returnTo);

        if ($response->status == Auth_OpenID_CANCEL) {
            $this->Session->setFlash("Google Login Cancelled");
            $this->redirect(array("controller" => "users", "action" => "login"));
        } elseif ($response->status == Auth_OpenID_FAILURE) {
            $this->Session->setFlash("Veficiation Failed: " . $response->message);
            $this->redirect(array("controller" => "users", "action" => "login"));
        } elseif ($response->status == Auth_OpenID_SUCCESS) {

            $axResponse = Auth_OpenID_AX_FetchResponse::fromSuccessResponse($response);
            debug ($response);
            debug ($axResponse);
            $this->Session->setFlash("Authenticated");
        }
    }
4

1 に答える 1

2

次の例を見てください: https://github.com/cakebaker/openid-component-example/blob/master/app/Controller/UsersController.php

于 2012-04-26T13:47:10.050 に答える