PHP: LightOpenID, как получить данные учетной записи от провайдера?


У меня возникли проблемы с небольшой библиотекой OpenID под названием LightOpenID . Я могу пройти аутентификацию почти у всех поставщиков, но я не знаю, как получить данные от поставщика. Я получаю только Array(), eaven с print_r().

Author: BenV, 2010-07-05

2 answers

Вам нужно позвонить getAttributes() после $openid->validate() не раньше.

Помните:

Обратите внимание, что это не гарантирует, что будут присутствовать какие-либо обязательные/необязательные параметры

 8
Author: Pete, 2010-07-05 13:18:09

Вот как я его использую. Это файл openid.php в папке lightopenid. В классе сделайте следующие дополнительные функции -

class LightOpenID
{
    public $returnUrl
         , $required = array()
         , $optional = array()
         , $verify_peer = null
         , $capath = null
         , $cainfo = null;

    // these are the variables which store the data about the user...
    public function ret_fname() { return $this->data['openid_ext1_value_namePerson_first']; }
    public function ret_lname() { return $this->data['openid_ext1_value_namePerson_last']; }
    public function ret_email() { return $this->data['openid_ext1_value_contact_email']; }
    public function ret_lang() { return $this->data['openid_ext1_value_pref_language']; }
}



Теперь создайте пример своего файла login.php который вызывается, когда вы хотите пройти аутентификацию. Может быть несколько копий этого файла для разных доменов аутентификации и т. Д.

<?php
# Logging in with Google accounts requires setting special identity, so this example shows how to do it.
session_start();
require 'lightopenid/openid.php';
include_once('config.php');                // initial setting file

try {

    $openid = new LightOpenID;                            // akshat - declared an object of class lightopenid.. this is listed in openid.php
    if(!$openid->mode) {

        if(isset($_GET['login'])) {

            $openid->identity = 'https://www.google.com/accounts/o8/site-xrds?hd=YourDomain.in'; //this can be changed as you know...       

            $openid->required = array('namePerson/friendly', 'contact/email' , 'contact/country/home', 'namePerson/first', 'pref/language', 'namePerson/last'); // akshat - line added by me from after reading from the net....

            header('Location: ' . $openid->authUrl());    
        }
?>
<script type="text/javascript" src="js/jquery-1.4.2.min.js" language="javascript"></script>
<script type="text/javascript">
    $(document).ready(function() {
            document.form.submit();
    });

</script>
<form name="form" action="?login" method="post"> </form>
<?php
    } elseif($openid->mode == 'cancel') {
        echo 'User has canceled authentication for Your Domain !';
    } else {                                                // FETCH USER INFO HERE
                $fname = $openid->ret_fname();              // fetching user first name...
        $lname = $openid->ret_lname();                  // fetching user last name...
        $email = $openid->ret_email();                  // fetching user email...
        $lang = $openid->ret_lang();                    // fetching user language...
                session_start();

                // use it as required. I set them in session !
                $_SESSION['admin']['emailID'] = $email;          //put email id in session.
                $_SESSION['admin']['fname'] = $fname;            //put first name also in session.
                $_SESSION['admin']['lname'] = $lname;            //put last name also in session.
                $rurl = $_SESSION['redirect'];                   // you can ignore this. Go to your own page now...
                header("Location:$rurl");               // Go back to the calling application !

    }
} catch(ErrorException $e) {
    echo $e->getMessage();
}
?>
 2
Author: Floccinaucinihilipilification., 2011-03-11 09:07:07