22
01/2008

Внедрение OpenID в symfony за 4 шага

The English version of this post

Примерно год назад был разработан плагин OpenIDPlugin версии 1.0.0 для symfony, который позволяет использовать OpenID только для аутентификации пользователя.

При создании этого блога мне этого было недостаточно, и я хотел от плагина выполнения следующих функций:
  • Наличие валидатора для проверки корректности формата введенного OpenID;
  • Предоставление удобного средства аутентификации пользователя;
  • Получение данных о пользователе (электронная почта, ник, полное имя) из OpenID;

Поэтому я доработал плагин, и получился OpenIDExtPlugin версии 1.0.0. Вы можете поставить и настроить его за следующие 4 шага:

  1. Скачиваете по ссылке, указанной выше;
  2. Распаковываете и закидываете в папку plugins вашего проекта;
  3. Прописываете роутинг в apps/myapp/config/routing.yml, например:

    openid_signin:
    url: /sfOpenIDAuth/signin
    param: { module: sfOpenIDAuth, action: signin }
    openid_finishauth:
    url: /sfOpenIDAuth/finish
    param: { module: sfOpenIDAuth, action: finish }
  4. Описываете действия после подтверждения принадлежности OpenID в методе openIDCallback():

    class sfOpenIDAuthActions extends BasesfOpenIDAuthActions
    {
    public function openIDCallback()
    {
    $openid = sfOpenID::simplifyURL($this->getRequestParameter('openid_identity'));
    $nickname = $this->getRequestParameter('openid_sreg_nickname');
    $fullname = $this->getRequestParameter('openid_sreg_fullname');
    $email = $this->getRequestParameter('openid_sreg_email');
    // do something
    return $this->redirect('@homepage');
    }
    }

После этого вы можете проверить работоспособность плагина по ссылке http://your_site/sfOpenIDAuth/signin, где будет форма ввода OpenID.

 

7 Comments_5

Спасибо! помогло :)

Зарегистрировался в разных местах, попробовал подставлять разные OpenID, и увидел что только myopenid.com выдает nickname, fullname, email

При попытке подставить OpenID с blogger.com, я получил ошибку

Fatal error: Call to undefined method sfOpenID::getError() in C:\www\...\sfprojects\blog\plugins\sfOpenIDPlugin\modules\sfOpenIDAuth\lib\BasesfOpenIDAuthActions.mda.php on line 54

Собственно такого метода - getError() там и нет, есть getErrors(), исправляем, получаем другую ошибку:

Fatal error: Call to undefined method sfOpenID::error() in C:\www\...\sfprojects\blog\plugins\sfOpenIDPlugin\lib\sfOpenID.mda.php on line 99

действительно, метода errors() нет, есть массив error[], убираем скобки, и все работает ;)

array(1) { [0]=> string(24) "No OpenID servers found." }

попробовал сюда подсунуть свои данные с:

cliamID.com

twitter.com

не работает, просьба к автору проверить плагин с разными OpenID провайдерами :)

Спасибо, да, недавно подсказали о таком баге, как только появится время, исправлю.
С клаймом разобрался, а твиттер я посмотрел — он не является OpenID-сервером. Можно качать новую версию плагина — http://blog.salikhovilyas.ru/2008/07/31/new-version-of-openid-plugin/
куча багов
Азат, предметнее, пожалуйста, критику. К тому же, если вы посмотрите, чуть позже я выпустил доработанное решение.
Ильяс, вы планируете доработку плагина для версии Symfony 1.4 ?
Оставить comment
Показать другие цифры

В тексте комментария можно использовать теги <b><i><u><s><sup><code><pre>.
Адреса сайтов автоматически становятся ссылками.

_