
Введение
SAuth — это библиотека социальной авторизации для Zend Framework. Она представляет из себя набор адаптеров для класса Zend_Auth. На момент написания статьи поддерживается авторизация через следующие сайты:
- Foursquare
- Goggle (OpenID)
- Flickr
- Vkontakte
- Mail.ru
- Gowalla
Большинство из них работает по протоколам OAuth, OpenID или смешанному варианту, хотя есть и собственные реализации.
Пример
В примере мы сделаем авторизация через facebook для нашего приложения.
Для начала приложение необходимо зарегистрировать у провайдера авторизации. В случае с facebook вам необходимо пройти по ссылке http://www.facebook.com/developers/apps.php и пройти несложную процедуру регистрации.
После регистрации приложения вы получите необходимые данные — Application ID и Application Secret. В зависимости от провайдера авторизации набор этих данных может отличаться.
Наш пример будет иметь два экшена — index и auth. indexAction будет проверять авторизован ли пользователь и в зависимости от результата показывать его данные, либо предлагать авторизоваться. authAction будет вызывать метод авторизации и показывать ошибки или перенаправлять пользователя на indexAction.
-
- public function indexAction() {
-
- //получаем инстанс объекта авторизации
- $auth = Zend_Auth::getInstance();
- //проверяем на авторзицию
- if ($auth->hasIdentity()) {
-
- $this->view->auth = true;
- //это метод вернет все данные пользователя
- //пришедшие от провайдера авторизации
- //такие как login, email и т.д.
- $this->view->parameters = $auth->getIdentity();
-
- } else {
-
- $this->view->auth = false;
- }
- }
-
Тут все достаточно просто.
Далее сам сам метод авторизации.
-
- public function authAction() {
-
- //конфигурация
- $config = array(
- 'consumerId' => 'Application ID',
- 'consumerSecret' => 'Application Secret',
- // url на который нас перенаправит facebook после авторизации
- // он должен вести обратно на authAction
- 'callbackUrl' => 'http:/example.com/index/auth/',
- 'display' => SAuth_Adapter_Facebook::DISPLAY_PAGE,
- );
-
- $auth = Zend_Auth::getInstance();
- //создаем адаптер
- $adapter = new SAuth_Adapter_Facebook($config);
- //авторизация
- $result = $auth->authenticate($adapter);
- //если прошла - редирект на index
- if ($result->isValid()) {
-
- $this->getResponse()->setRedirect('/');
-
- } else {
- //если есть ошибки показываем их
- $this->view->auth = false;
- $this->view->errors = $result->getMessages();
- }
- }
-
Попробуем разобрать что тут происходит. Метод authenticate вызовет одноименный метод из адаптера, который разбит на две логические части. В первой происходит проверка параметров и перенаправление пользователя на сайт провайдера авторизации, а во второй обрабатывается ответ. Именно поэтому callBackUrl должен вести на authAction.
Ссылки
Пример можно посмотреть тут:
SAuth demo
Форкнуть, скачать, посмотреть код можно тут:
Страница проекта на github.com