22
01/2008
Внедрение OpenID в symfony за 4 шага
Примерно год назад был разработан плагин OpenIDPlugin версии 1.0.0 для symfony, который позволяет использовать OpenID только для аутентификации пользователя.
При создании этого блога мне этого было недостаточно, и я хотел от плагина выполнения следующих функций:- Наличие валидатора для проверки корректности формата введенного OpenID;
- Предоставление удобного средства аутентификации пользователя;
- Получение данных о пользователе (электронная почта, ник, полное имя) из OpenID;
Поэтому я доработал плагин, и получился OpenIDExtPlugin версии 1.0.0. Вы можете поставить и настроить его за следующие 4 шага:
- Скачиваете по ссылке, указанной выше;
- Распаковываете и закидываете в папку plugins вашего проекта;
- Прописываете роутинг в 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 }
- Описываете действия после подтверждения принадлежности 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.


Зарегистрировался в разных местах, попробовал подставлять разные 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 провайдерами :)