10

こんにちは
私は数時間前にLightOpenID(http://gitorious.org/lightopenid)をダウンロードしましたが、それでもそれを機能させる方法を理解できません。
このグーグルの例をtest.phpファイル に保存しました

<?php
require '../lib/init.php';
require '../lib/openID/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>';
?>

init.phpは私のページのinitファイルです(定数、クラス、関数、データベース接続など)。
このコードを実行した後、「LoginwithGoogle」というラベルの付いたボタンを取得しました。

echo '<pre>'.print_r($openid,true).'</pre>';

$openidオブジェクトに関する情報を提供する

LightOpenIDオブジェクト([returnUrl] => http://kur.com/openid.php [必須]=>配列()

[optional] => Array
    (
    )

[identity:LightOpenID:private] => https://www.google.com/accounts/o8/id
[claimed_id:LightOpenID:private] => https://www.google.com/accounts/o8/id
[server:protected] => https://www.google.com/accounts/o8/ud
[version:protected] => 2
[trustRoot:protected] => http://kur.com
[aliases:protected] => 
[identifier_select:protected] => 1
[ax:protected] => 1
[sreg:protected] => 
[data:protected] => Array
    (
        [login] => 
    )

)。

...特別なことは何もありません...そしてそれだけです...
私はグーグルでチュートリアルを検索することに多くの時間を費やしていますが、1つも見つけることができません。手伝ってくれませんか。
ユーザーにログインする方法は?
ログに記録されたユーザー情報(ユーザー名、メール)をどこから取得する必要がありますか?
オープンIDを使ったことがないので困惑しています…
よろしくお願いします

4

4 に答える 4

34

ユーザーにログインする方法は?

あなたの例では、認証を完了する方法を示す行があります:

echo 'User ' . ($openid->validate() ? $openid->identity . ' has ' : 'has not ') . 'logged in.';

trueが返された場合$openid->validate()、それは、であると主張するユーザー$openid->identityが認証されていることを意味します。

標準の認証と比較する場合:

標準認証:

  • ユーザーがログインとパスワードを入力します
  • サーバーは、そのようなログインとパスワードのペアがあるかどうかをチェックします。
  • 存在する場合、ユーザーは(ユーザーが提供したログインで)認証されるため、ユーザーを記憶するためにCookieを設定します(またはログインが成功したときに実行したいことは何でも)。

OpenID認証(LightOpenIDを使用):

  • ユーザーがopenidIDを入力します
  • サーバーはLightOpenIDを使用して認証し、呼び出します$openid->validate()
  • trueが返された場合validate()、ユーザーは(で)認証されるため、ユーザー$openid->identityを記憶するためにCookieを設定します(またはログインが成功したときに実行したいことは何でも)。

基本的に、ユーザーが本人であると主張している(つまり、認証されている)ことを確認したら、通常の認証であるかのように続行します。

通常、IDをセッションIDとともにどこかに保存する必要があります。

ログに記録されたユーザー情報(ユーザー名、メール)をどこから取得する必要がありますか?

ユーザー名はにあり$openid->identityます。ただし、表示名としてニックネームを使用することをお勧めします。ただし、ニックネームと電子メールアドレスを取得するには、追加の構成が必要です。基本的に、を呼び出す前に$openid->authUrl()、次を追加する必要があります。

$openid->required = array('namePerson/friendly', 'contact/email');

その行により、LightOpenIDはこれらのパラメーターを要求します。他のパラメーター(OPでサポートされている場合とされていない場合があります)のリストは、axschema.orgで確認できます。次に、それらの値を取得するには、を呼び出した後validate()、を呼び出します$openid->getAttributes()。たとえば、使用可能なすべてのパラメータが返されます。

array(
    [namePerson/friendly] => Mewp
    [contact/email] => mewp@example.com
)

ただし、このリストには他のパラメーターが含まれている可能性があり、要求したパラメーターが含まれていない可能性があることに注意してください。基本的に、OPは必要なものを自由に返すことができるため、いくつかの値が不足していることに備える必要があります。

于 2010-10-22T16:48:32.467 に答える
5

ユーザーが「example-google.php」ページの「LoginwithGoogle」ボタンをクリックすると、Googleにリダイレクトされ、ユーザーがリクエストを受け入れると、再びあなたのページにリダイレクトされ、ユーザーのOpenidのみを取得できます。

ただし、他の情報を取得したり、OpenIDの提供を変更したりする場合は、次の方法で行うことができます。

<?php
require 'openid.php';
try {
$openid = new LightOpenID;
if(!$openid->mode) {
    if(isset($_GET['oidType'])) {
$oidType = $_GET['oidType'];
$openid = new LightOpenID;
    if ($oidType==1)
    {
        $openid->identity = 'https://www.google.com/accounts/o8/id';
    }
    else
    {
        $openid->identity = 'https://me.yahoo.com ';
    }
    $openid->required = array(
      'namePerson',
      'namePerson/first',
      'namePerson/last',
      'contact/email',
    );
    $openid->returnUrl = 'http://www.yourdomain.com/login.php';
    header('Location: ' . $openid->authUrl());

    }
?>
<a href="?oidType=1">Login with Google</a>
<a href="?oidType=2">Login with Yahoo</a>
<?php
} elseif($openid->mode == 'cancel') {
    echo 'User has canceled authentication!';
} 

} elseif($openid->validate()) {
$openid_identity = $openid->identity;
    $data = $openid->getAttributes();
    $email = $data['contact/email'];
    $namePerson = $data['namePerson'];
    $first = $data['namePerson/first'];
    $last = $data['namePerson/last'];

echo "Openid:$identitystr <br>";
    echo "Email : $email <br>";
    echo "namePerson : $namePerson <br>";
    echo "first : $first <br>";
    echo "last : $last <br>";

} else {
    echo "The user has not logged in";
}
} catch(ErrorException $e) {
echo $e->getMessage();
}
于 2011-07-04T16:27:31.343 に答える
2

このスクリプトは、インターネットへのWi-Fi接続を使用してラップトップでApacheを実行しているローカルホストから正常に機能するようになりました。

ドメインを作成するときに、新しいLightOpenIdオブジェクトにドメインを渡す必要があると言われました。

$iniConfigは、すべての重要な変数を格納するドキュメントルートの外部に格納されているparse_ini_file配列です。

この場合

[openid] 
domain='mydomain.com' 

そこで、新しいオブジェクトを作成し、サーバーが存在するドメインを含めます。

$openid = new LightOpenID($iniConfig['openid']['domain']);

私はそれをこのように書きました、そしてそれがドメインなしで動作するかどうかを確認していません。

于 2012-07-20T18:45:28.437 に答える
-2

127.0.0.1で実行する場合は、ポート80を外部のWebに開いたサーバーで実行する必要があります。Googleはあなたにアクセスして情報を返すことができません。

于 2010-10-22T15:42:17.843 に答える