0

LightOpenIDクラスを使用して、Google のログインをサイトに統合しようとしています。私はデフォルトのコードを使用しています:

<?php
require 'includes/openid.php';

try {
    if(!isset($_GET['openid_mode'])) {
        if(isset($_GET['login'])) {
            $openid = new LightOpenID;
            $openid->identity = 'https://www.google.com/accounts/o8/id';
            header('Location: ' . $openid->authUrl());
        }
?>
<form action="?login" method="post">
    <button>Login with Google</button>
</form>
<?php
    } elseif($_GET['openid_mode'] == 'cancel') {
        echo 'User has canceled authentication!';
    } else {
        $openid = new LightOpenID;
        echo 'User ' . ($openid->validate() ? $openid->identity . ' has ' : 'has not ') . 'logged in.';
    }
} catch(ErrorException $e) {
    echo $e->getMessage();
}
echo '<pre>'.print_r($openid,true).'</pre>';
?>

もともと、これはコンストラクト メソッドの引数 1 が不足していることを示していたため、new LightOpenIDメソッドを as として呼び出す必要がありましたnew LightOpenID($host)。しかし、私はそれを変更してログインしようとしたので、コードを元に戻したときにそのエラーは発生しません。エラーを取得するだけです...

とにかく、その点はさておき、ホストを追加した後、Google アカウントでサイトにサインインするかどうかを尋ねられた Google ページに移動しました。サインイン ボタンを押したところ、サインインしていないというメッセージだけが返されました。

User has not logged in.

LightOpenID Object
(
    [returnUrl] => myReturnURL
    [required] => Array
        (
        )

    [optional] => Array
        (
        )

    [verify_peer] => 
    [capath] => 
    [cainfo] => 
    [data] => Array
        (
            [login] => 
            [openid_ns] => http://specs.openid.net/auth/2.0
            [openid_mode] => id_res
            [openid_op_endpoint] => https://www.google.com/accounts/o8/ud
            [openid_response_nonce] => 2012-07-23T14:06:24ZQwlS1zWFRdvg6A
            [openid_return_to] => myReturnURL
            [openid_assoc_handle] => AMlYA9WMwp_rTkH3swNLEF5UASFvhyOR-kqVSXGe7cvXe7ws5z8HHWUu
            [openid_signed] => op_endpoint,claimed_id,identity,return_to,response_nonce,assoc_handle
            [openid_sig] => NtOEY8dUM1Hpt2tTR9x0RdN5o1c=
            [openid_identity] => https://www.google.com/accounts/o8/id?id=AItOawkXNCi5qq-3Vj_esgSQAwmEN_nVIC8BHAQ
            [openid_claimed_id] => https://www.google.com/accounts/o8/id?id=AItOawkXNCi5qq-3Vj_esgSQAwmEN_nVIC8BHAQ
        )

    [identity:LightOpenID:private] => 
    [claimed_id:LightOpenID:private] => https://www.google.com/accounts/o8/id?id=AItOawkXNCi5qq-3Vj_esgSQAwmEN_nVIC8BHAQ
    [server:protected] => https://www.google.com/accounts/o8/ud
    [version:protected] => 2
    [trustRoot:protected] => mySite
    [aliases:protected] => 
    [identifier_select:protected] => 
    [ax:protected] => 1
    [sreg:protected] => 
    [setup_url:protected] => 
    [headers:protected] => Array
        (
            [cache-control] => no-cache, no-store, max-age=0, must-revalidate
            [pragma] => no-cache
            [expires] => Fri, 01 Jan 1990 00:00:00 GMT
            [date] => Mon, 23 Jul 2012 14:06:26 GMT
            [content-type] => text/plain; charset=UTF-8
            [x-content-type-options] => nosniff
            [x-frame-options] => SAMEORIGIN
            [x-xss-protection] => 1; mode=block
            [server] => GSE
        )

)

私はすでに Google にサインインしていたので、Google アカウントを使用して自分の Web サイトにサインインすることを確認するためだけに、Google ページはログインを要求しませんでした。サインインしていると表示されない理由がわかる人はいますか?

前もって感謝します。

4

1 に答える 1

1

最新バージョンを使用すると、動作するはずです。

ライブラリの新しいバージョンでは、コンストラクターに引数が必要であることを覚えておいてください。

$openid = new LightOpenId('www.domain.com');
于 2012-07-23T19:11:50.113 に答える