OpenID авторизация в CodeIgniter

В связи с распространением технологии OpenID (авторизации без регистрации) пора эту модную фишку внедрить и на своем сайте.

В CodeIgniter для этого уже есть готовая библиотека. Скачать ее можно с этой страницы http://codeigniter.com/wiki/OpenID/. Так же существует howto по настройке и использованию библиотеки. В howto все грамотно расписано поэтому настроить все, произвести тестовый запуск, а затем переделать все «под себя» не составит труда. Однако существует несколько подводных камней, из-за которых авторизация может не заработать.

Первый камень.

Для работы библиотеки понадобится еще скачать пакет php-openid. Для работы этого пакета необходимо наличие PHP не ниже 4.3.0 и расширений к нему: GMP или Bcmath (GMP очень рекомендуется для высокой производительности), CURL, DOM или DOMXML. Проверку хостинга на предмет готовности к использованию пакета можно следующим скриптом examples/detect.php. Возможны проблемы с генерацией случайных чисел, поддержкой SSL, cURL, а также опцией allow_url_fopen в php.ini. В общем довольно капризная штучка.

Второй камень.

Уже после настройки библиотеки, во время тестирования возникла следующая ошибка. OpenID сервера возвращают результаты методу check() контроллера test (согласно настроек config/openid.php для тестового примера). Так вот до вызова метода check() дело не доходило. Виновата была системная библиотека Router.php, которая заворачивала обработку запроса.

Проблема решилась написанием расширения для системной библиотеки CI Router:

class MY_Router extends CI_Router{

   function __construct()
   {
      parent::CI_Router();
   }

   function _validate_request($segments)
   {
       if (substr($segments[ 0], 0,13) == 'janrain_nonce') {
           return array('test', 'check');
       }

       return parent::_validate_request($segments);
   }

}

В строке с

return array('test', 'check');

test и check – имя контроллера и метод которые проверяют ответ OpenID сервера. Если будете использовать контроллер или метод с другими названиями, не забудьте изменить названия и в этом файле.

На этом все. Удачной авторизации!


Комментарии

Оставить комментарий

Ответ на OpenID авторизация в CodeIgniter