2010-07-05 6 views
8

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

+1

Нам нужно больше информации ... как насчет говорит нам именно то, что вы пытались (как, скопировать и вставить код) и затем скажите нам результаты (как в, скопируйте и вставьте). – Narcissus

+0

Извините, вот код: http://pastebin.com/kS9S4WVk Все работает очень хорошо, но в строке 39-41 я пытаюсь распечатать электронное письмо с текущей учетной записью. Результатом является «Массив()». – Pwntus

+0

Ошибки сообщения/отображения ошибок? Вы проверили свой журнал ошибок PHP? – Narcissus

ответ

8

Необходимо позвонить по телефону getAttributes()после$openid->validate() не раньше.

Помните:

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

+0

Я сделал вот так: http://pastebin.com/ULsLvhxp Итак, чтобы отобразить электронную почту, я использую $ foo ['email']? – Pwntus

+0

Это будет '$ foo ['contact/email']' - согласно документам, атрибуты отображаются в формате AX. – Pete

+2

Кроме того, '$ openid-> required = array ('contact/email');' необходимо вызывать ** перед ** '$ openid-> validate()' – Pete

2

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

 Смежные вопросы

  • Нет связанных вопросов^_^