PHP: LightOpenID, как получить данные учетной записи от провайдера? - PullRequest
8 голосов
/ 05 июля 2010

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

Ответы [ 2 ]

8 голосов
/ 05 июля 2010

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

Помните:

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

2 голосов
/ 11 марта 2011

Вот как я это использую.Это файл 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();
}
?>
...