Поддержка Zend OpenId 2.0 - PullRequest
       40

Поддержка Zend OpenId 2.0

2 голосов
/ 15 марта 2011

Мне нужно зарегистрировать пользователя по OpenId (например, Google)Но это не работает!

Я уже видел некоторые темы:http://framework.zend.com/issues/browse/ZF-6905
Zend OpenId и Google И другие ..

Но все это не работает!

Мне нужно получить информацию о пользователе (например, логин или адрес электронной почты), но если я использую вот так

// $data['openidIdentifier'] = 'https://www.google.com/accounts/o8/id';
public function loginByOpenIdAction() {
    $request = $this->getRequest();
    $form = new Application_Form_UsersLoginByOpenId();

    $this->view->headTitle('Login by OpenId');

    if ($request->isPost()) {
        $data = $request->getPost();
        if ($form->isValid($data)) {
            $consumer = new Zend_OpenId_Consumer();
            $backUrl = $this->getHelper('Url')->url(array('controller' => 'users', 'action' => 'signup-from-open-id'));

            if (!$consumer->login($data['openidIdentifier'], $backUrl)) {
                $this->view->error = 'Can`t connect to OpenId provider';
            }
        }
    }

    $this->view->form = $form;
}

public function signupFromOpenIdAction() {
    $consumer = new Zend_OpenId_Consumer();
    $data = &$_GET;

    $sreg = new Zend_OpenId_Extension_Sreg(array(
        'nickname' => true,
        'email' => false,
        'fullname' => false), null, 1.1
    );

    if ($consumer->verify($data, $id, $sreg)) {
        $properties = $sreg->getProperties();
        var_dump($properties);
        var_dump('allow', $id);
    } else {
        var_dump('deny', $id, $consumer);
    }
    die;
}

И вывод:

string 'deny' (length=4)
string 'https://www.google.com/accounts/o8/id?id=fooBarFooBar' (length=80)
object(Zend_OpenId_Consumer)[61]
  protected '_storage' => 
    object(Zend_OpenId_Consumer_Storage_File)[62]
      private '_dir' => string '/tmp/azat/openid/consumer' (length=25)
  protected '_dumbMode' => boolean false
  protected '_cache' => 
    array
      empty
  private '_httpClient' => null
  private '_session' => null
  private '_error' => string 'Extension::parseResponse failure' (length=32)

Пожалуйста, помогите: как я могу получить информацию о пользователе с сервера openid (например, Google) для зарегистрированного пользователя?

Если я использую $consumer->verify($data, $id), чемвсе хорошо, но мне нужна информация о пользователе для регистрации

А также я использую Zend_OpenId_Consumer из этой проблемы http://framework.zend.com/issues/browse/ZF-6905,, потому что с родным Zend_OpenId_Consumer $consumer->verify($data, $id) это не работает

Также предложенияиспользуйте некоторых брокеров или других библиотек, работающих с openid not offer.

Ответы [ 2 ]

4 голосов
/ 15 марта 2011

У Akeem Philbert есть пост и несколько файлов, которые вы можете использовать для расширения реализации OpenID в ZF, чтобы поддерживать хотя бы использование OpenID с Google.

http://ak33m.com/?p=71

Также есть запись в блоге о том, как заставить ZF работать с Facebook и Twitter, по адресу

http://shortrecipes.blogspot.com/2011/02/example-of-openid-facebook-and-twitter.html

AsК сожалению, @takeshin отметил, что ZF еще не полностью поддерживает OpenID 2.0.

1 голос
/ 15 марта 2011

AFAIK Zend Framework еще не полностью поддерживает OpenID 2.0.

Пожалуйста, обратитесь к этой проблеме ZF:

http://www.framework.zend.com/issues/browse/ZF-6905?page=com.atlassian.streams.streams-jira-plugin%3Aactivity-stream-issue-tab

Вместо этого вы можете использовать другие внешние библиотеки:

...