PHP OpenID получает ник и адрес электронной почты - PullRequest
0 голосов
/ 07 октября 2010

Для аутентификации OpenID я использую «PHP OpenID Library» (http://www.janrain.com/openid-enabled). Как, с помощью этой библиотеки, запросить дополнительную информацию (никнейм, адрес электронной почты)?

I 'у меня возникли проблемы с LightOpenID, когда я спрашиваю электронную почту на яндексе LightOpenID-> valid возвращает false (

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
    }
}

1 Ответ

1 голос
/ 07 октября 2010

Здесь - неполный пример. Он неполон в том смысле, что он использует только SREG, и не каждый провайдер поддерживает его (например, Google поддерживает только AX).

Насколько я знаю, php-openid не предлагает простой способ автоматически определить, что поддерживает сервер, и соответственно использовать AX или SREG.

Для получения дополнительной информации я бы посмотрел комментарии исходного кода или, как предлагает README, сгенерировал из них документацию, используя phpdoc.

Однако, если вы можете переключать библиотеки, я бы порекомендовал LightOpenID . Он проще в использовании и делает большинство вещей автоматически (в отличие от php-openid).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...