Zend FrameWork 2 и авторизации c Twitter

Опубликовано admin - пн, 10/08/2012 - 18:12

Для мультиязычных сайтов необходима авторизация из социальных сетей, так как по статистике, более 50 % пользователей моих сайтов зарегистрированы из социальных сетей, а именно – из twitter и facebook.

Более того уровень доверия к таким сайтам намного больше, чем к тем у которых до сих пор отсутствует система авторизации на основе социальных сетей.

Что нужно для авторизации пользователей.

  • Ключ приложения twitter и секрет (секретная фраза) эти данные можно плучить на сарнице dev.twitter.com/apps, создав новое приложение.
  • Zend FrameWork 2
  • модули для Zend FrameWork 2 - ZfcUser и ZfcBase
  • Модуль Hybridauth v 2.0.10 hybridauth-v2.0.10.zip

Модуль ZfcUser и комплект скриптов hybridauth-v2.0.10.zip

Первый не сложно найти, второй располагается по адресу - hybridauth

Итак, давайте начнём со скачивания архива hybridauth-v2.0.10.zip После этого скачайте ZfcUser - ZfcBase и ZfcUser.

ZfcUser и ZfcBase два модуля, первый из которых отвечает за авторизацию пользователя, второй содержит вспомогательные классы для изменения данных пользователя и обработки события регистрации и авторизации пользователя.

Их установка не сложна - скачайте и распакуйте в директорию с модулями Zend FrameWork 2, затем подключите их в файле /config/application.config.php

Предположим Вы имеете структуру из следующих модулей (глобальный конфигурационный файл "application.config.php"):

После этого, необходимо настроить Hybridauth, для этого отредактируйте файл config.php, который находится в директории \hybridauth\hybridauth\ следующим образом, - замените полученными при регистрации вашего приложения (https://dev.twitter.com/apps) ключом и секретной фразой параметры «keys» и «secret» в файле /hybridauth/hybridauth/config.php:

После этого нужно создать новое действие, которое будет являtтся страницей авторизацией из twitter.com на вашем сайте, - например:

Обратите внимание необходимо правильно указать пути до основной директории hybridauth! Заранее скажу, что так писать код не совсем соответствует правилам Zend Framework, по правилам нужно вынести подключаемые классы HybridAuth в отдельную директорю Plugin, основного класса и подключать их в качетсве плагина Zend FrameWork, но в целях упрощения и обучения, думаю, так можно поступить на первое время.

дальше мы проверяем, был ли осуществлён ранее вход с twitter

после этого получаем данные и выводим

выводим дополнительную статистику из аккаунта twitter

 

$service – переменная, хранящая результат работы класса «ServiceManager», по сути своей - это класс для доступа к другим классам нашего модуля. Полная информация о том, что такое «ServiceManager» – ServiceManager

'zfcuser_user_service' – обозначение вспомогательного класса (сервиса), который находится в директории \module\ZfcUser\src\ZfcUser\Service\ в файле User.php Далее getUserService будет содержать результат выполнения метода

Интерфейс пользователя нужен для установки и модификации персональных данных пользователя, он поставляется по умолчанию вместе с модулем «ZfcUser»: $user = new \ZfcUser\Entity\User();

До того как Вы начнёте менять данные пользователя, необходимо осуществить проверку на наличие этого пользоателя в базе данных, если пользователь был ранее и осуществил вход не за чем повторено создавать запись об этом пользователе, нужно обновить уже сущетсвующую:

findByIdentifier может быть следующего содержания и находится по адресу \module\ZfcUser\src\ZfcUser\Mapper\User.php

Обязательно установите временный пароль пользователю для того чтобы он мог войти в этот же аккаунт через обычный вход! Далее можно установить данные для пользователя на Ваш вкус, временный пароль и т.д. эти функции здесь удалены. Внимание! В этом примере пароль пустой!

Hybridauth устроен таким образом, что данные ранее полученные от twitter сохраняются в хранилище (сессию) её можно удалить, хотя сделано это больше для тестирования или например, если Вам нужно постоянно отслеживать статус авторизации на сайте twitter, а не получать старые данные.

        // нужно или нет?
        $hybridauth->restoreSessionData(); 
        // нужно или нет?
 

После этого остаётся перенаправить пользователя в его аккаунт методом dispatch действию authenticate контроллёра «zfcuser», передав дополнительный параметр 'twitter'=>$post['twitter'] и не обращайте внимание на код после строки "// TODO: Add the redirect parameter here...":

Таким образом можно расширить стандартную аутентификацию пользователя! При этом по тому же принципу можно добавить весь набор социальных сетей, которые находятся в Hybridauth:

  • Foursquare
  • LinkedIn
  • MySpace
  • Live
  • Twitter
  • Facebook
  • Google
  • AOL
  • Yahoo
  • OpenID
Оценка

No votes have been submitted yet.

На разработку сайта! Скидки до 20%!