2010-07-05 7 views
8

Tengo problemas con una pequeña biblioteca OpenID llamada LightOpenID . Puedo autenticar a casi todos los proveedores, pero no sé cómo obtener los datos del proveedor. Solo obtengo Array(), eaven con print_r().PHP: LightOpenID, ¿cómo recuperar datos de cuenta del proveedor?

+1

Necesitamos más información ... ¿qué nos dice exactamente lo que ha intentado (como en, copia y pega el código) y luego cuéntanos los resultados (como en, copiar y pegar). – Narcissus

+0

Disculpe, aquí está el código: http://pastebin.com/kS9S4WVk Todo funciona bastante bien, pero en la línea 39-41 trato de imprimir el correo electrónico de la cuenta actual. El resultado es "Array()". – Pwntus

+0

¿Se han producido errores en los errores de visualización/visualización? ¿Has revisado tu registro de errores de PHP? – Narcissus

Respuesta

8

Tiene que llamar al getAttributes()después de$openid->validate() no antes.

Recuerde:

Tenga en cuenta que esto no garantiza que cualquiera de los parámetros requeridos/opcionales estarán presentes

+0

He hecho esto ahora: http://pastebin.com/ULsLvhxp Entonces para mostrar el correo electrónico, ¿uso $ foo ['email']? – Pwntus

+0

Será '$ foo ['contact/email']' - según los documentos, los atributos se asignan al formato AX. – Pete

+2

Además, '$ openid-> required = array ('contact/email');' debe llamarse ** antes ** '$ openid-> validate()' – Pete

2

Ésta es la forma en que lo uso. Este es el archivo openid.php en la carpeta lightopenid. En la clase de realizar las siguientes funciones adicionales: -

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']; } 
} 



Ahora haga su ejemplo login.php archivo que se llama cuando se desea autenticar. Puede haber varias copias de este archivo para diferentes dominios de autenticación etc.

<?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(); 
} 
?> 
Cuestiones relacionadas