PHP OpenID geting昵称&电子邮件

时间:2010-10-07 11:43:48

标签: php openid

对于OpenID身份验证,我正在使用“PHP OpenID Library”(http://www.janrain.com/openid-enabled)。如何在此库的帮助下,询问其他信息(昵称,电子邮件)?

当我在yandex LightOpenID->上询问电子邮件时,我遇到了LightOpenID的问题。有效返回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 个答案:

答案 0 :(得分:1)

Here是一个不完整的例子。它不完整,因为它只使用SREG,并非每个提供商都支持它(例如,Google仅支持AX)。

据我所知,php-openid没有提供一种简单的方法来自动检测服务器支持的内容,因此使用AX或SREG。

有关更多信息,请查看源代码的注释,或者阅读README建议,使用phpdoc生成文档。

但是,如果您可以切换库,我建议LightOpenID。它更容易使用并自动执行大多数操作(与php-openid相反)。