Вход в систему с помощью LightOpenID

Здравствуйте
Я загрузил LightOpenID (http://gitorious.org/lightopenid) несколько часов назад, но все еще не могу понять, как заставить его работать.
Я получил этот пример Google, сохраненный в файле 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 для моей страницы (константы, классы, функции, подключение к db и т. Д.).
После запуска этого кода я получил кнопку с надписью «Войти в Google» и после нажатия

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

дать некоторую информацию об объекте $ openid

Объект LightOpenID ([returnUrl] => http://kur.com/openid.php [required] => Array ()

 [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] => ) 

)

… ничего особенного … и вот оно …
Я трачу много времени на поиск учебников в Google, но не могу найти ни одного. Не могли бы вы мне помочь.
Как войти в систему?
Откуда я должен получить информацию о пользователе (как имя пользователя, почту)?
Я никогда не использовал открытый идентификатор, и я смущен ….
заранее спасибо

    Этот скрипт теперь отлично работает с моего локального хоста, использующего apache на моем ноутбуке с Wi-Fi-подключением к Интернету.

    Мне сказали, что вы должны передать свой домен новому объекту LightOpenId при его создании.

    $iniConfig – это массив parse_ini_file, хранящийся вне корня документа, где хранятся все важные переменные.

    в этом случае

     [openid] domain='mydomain.com' 

    Итак, я создаю новый объект и включаю домен, на котором находится сервер:

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

    Я написал это так, и не проверял, работает ли он без домена.

    Как войти в систему?

    В вашем примере есть строка, показывающая, как завершить аутентификацию:

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

    Если $openid->validate() возвращает значение true, это означает, что пользователь, который утверждает, что является $openid->identity , аутентифицирован.

    Если вы сравните его со стандартной проверкой подлинности:

    Стандартное разрешение:

    • Пользователь вводит логин и пароль
    • Сервер проверяет наличие такой пары логинов и паролей.
    • Если есть, пользователь аутентифицируется (с логином, который он предоставил), поэтому мы установили cookie, чтобы запомнить его (или все, что вы хотите сделать при успешном входе в систему).

    OpenID auth (с LightOpenID):

    • Пользователь вводит идентификатор openid
    • Сервер использует LightOpenID для его аутентификации, затем вызывает $openid->validate()
    • Если validate() возвращает true, пользователь аутентифицируется (с $openid->identity ), поэтому мы устанавливаем cookie для его запоминания (или что-то еще, что вы хотите сделать при успешном входе в систему).

    В принципе, как только вы подтверждаете, что пользователь является тем, кем он утверждает, что он (то есть он аутентифицирован), вы продолжаете, как если бы это было обычное auth.

    Как правило, вы должны хранить идентификационную информацию где-нибудь вместе с идентификатором сеанса.

    Откуда я должен получить информацию о пользователе (как имя пользователя, почту)?

    Имя пользователя находится в $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 может возвращать все, что захочет, поэтому вам нужно быть готовым к отсутствию некоторых значений.

    когда пользователь нажал кнопку «Войти с помощью Google» на странице «example-google.php», вы будете перенаправлены на 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(); } 

    Вам нужно запустить его на сервере с портом 80, открытым для внешней сети, если вы запустите его на 127.0.0.1 Google не может получить доступ к вам и вернуть информацию