2010-10-07 5 views
0

Pour l'authentification OpenID j'utilise "PHP OpenID Library" (http://www.janrain.com/openid-enabled). Comment, avec l'aide de cette bibliothèque, demander des informations supplémentaires (pseudo, email)?PHP OpenID obtenant un pseudo et un email

J'ai quelques problèmes avec LightOpenID, quand je demande courriel à yandex LightOpenID-> Retours valides faux (

class Ncw_OpenID extends LightOpenID 
{ 
    const OPENID_MODE_CANCEL = 'cancel'; 

    public function __construct() 
    { 
     parent::__construct(); 
     $this->required = array('namePerson/friendly', 'contact/email'); 
     $this->optional = array('contact/email'); 
     //$this->returnUrl = 'http://' . SITE_URI . '/users/login'; 
    } 

    public function getAttributes() { 
     $attr = parent::getAttributes(); 
     $newAttr = array(); 
     foreach ($attr as $key => $value) { 
      if (isset(parent::$ax_to_sreg[$key])) $key = parent::$ax_to_sreg[$key]; 
      $newAttr[$key] = $value; 
     } 
     return $newAttr; 
    } 
} 

class Users_IndexController extends Zend_Controller_Action 
{ 
    public function loginAction() 
    { 
     $openIDMode = $this->_request->getParam('openid_mode'); 
     $openID = new Ncw_OpenID(); 
     $form = new Users_Form_Login(array('action' => $this->view->url(array(), 'openIDLogin'))); 

     if (null === $openIDMode) { 

      if ($this->_request->isPost() && $form->isValid($_POST)) { 
       $openID->identity = $form->getValue('openIDUri'); 
       $this->_redirect($openID->authUrl()); 
       exit(); 
      } 
      $this->view->content = $form; 
     } elseif (Ncw_OpenID::OPENID_MODE_CANCEL == $openIDMode) { 
      $this->view->content = 'Cancel'; 
     } else { 
      if ($openID->validate()) { 
       $this->view->content = 'Valid: ' . $openID->identity . ' = ' . var_export($openID->getAttributes(), true); 
      } else { 
       $this->view->content = 'Not Valid'; 
      } 
      $this->view->content .= $form; 
     } 
    } 

    public function logoutAction() 
    { 
     // action body 
    } 
} 

Répondre

1

Here est un exemple incomplet. Il est incomplet dans le sens où il utilise seulement SREG, Tous les fournisseurs ne le supportent pas (par exemple, Google ne prend en charge que AX)

Pour autant que je sache, php-openid n'offre pas un moyen simple de détecter automatiquement ce que le serveur prend en charge et donc d'utiliser AX ou SREG

Pour plus d'informations, je regarderais les commentaires du code source ou comme le suggère le fichier README, générer de la documentation à partir d'eux, en utilisant phpdoc.

Cependant, si vous pouvez changer de librairie, je recommanderais LightOpenID. C'est plus facile à utiliser et fait la plupart des choses automatiquement (contrairement à php-openid).

+0

merci, besoin d'essayer) – ErgallM

+0

@ErgalIM: Je ne comprends pas votre commentaire, pourriez-vous clarifier ce que vous voulez dire? (en particulier, à quoi répond "oui"?) – Mewp

+0

commentaire manqué) – ErgallM

Questions connexes