2

私は LightOpenID を使用しています。非常に軽量ですが、理解しにくいものであり、Wiki もありません...

彼らが提供するサンプル ファイルは以下のとおりです (長文の投稿で申し訳ありません)。

require 'openid.php';
try {

    if(!isset($_GET['openid_mode'])) {  // what is this about?

        if(isset($_POST['openid_identifier'])) {

            $openid = new LightOpenID;

            $openid->identity = $_POST['openid_identifier'];

            header('Location: ' . $openid->authUrl());
        }
?>
<form action="" method="post">
    OpenID: <input type="text" name="openid_identifier" /> <button>Submit</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();
}

誰かが本当に役立つと感じている場合は、ここにある既存のスクリプトに追加しようとしています。$openid->validate() が true を返したときに、$sql_answer をデータベースに保存できるようにするにはどうすればよいですか?

4

2 に答える 2

3

OpenID では、ログイン手順を完了するために、関係者間でいくつかの要求を実行する必要があります。1回のやり取りでは不十分です。すなわち:

  1. ブラウザがログイン ページを要求するので、フォームを送信します (openid_identifier も openid_mode も設定されていません)。
  2. ユーザーは openid を入力して送信します。ユーザーをリダイレクトして、プロバイダーとのトランザクションを開始する必要があります (フォームからの openid_identifier は設定されていますが、openid_mode は設定されていません)。
  3. ユーザーはプロバイダーにリダイレクトされてログインし、プロバイダーはページにリダイレクトします。返されたデータが本物であることを検証し、その識別子を使用して実際にユーザーをログインさせる必要があります (例: セッションの確立、UI の更新など) (openid_mode は「id_res」、「cancel」、または「error」に設定されます)。 )。

したがって、LightOpenID の 2 つのインスタンス化は、実際にはケース 2 と 3 の別々の HTTP リクエストに属します。ケース 1 では、静的フォームを表示しているため、LightOpenID オブジェクトは必要ありません。

于 2010-11-07T23:42:18.373 に答える
2

彼らはウィキを提供します:http ://code.google.com/p/lightopenid/w/list

スクリプトを使用して2つのOpenIDオブジェクトを作成する方法はありません。スクリプトに2回含まれているのが気に入らない場合は$openid = new LightOpenID;、1回だけ書き直してください。if(isset($_POST['openid_identifier'])) {

于 2011-01-17T13:58:22.243 に答える