Постоянные читатели этого блога, наверное, помнят, что и о фреймворке Yii, и о сервисе аутентификации Loginza я раньше рассказывал. Найти эти статьи несложно: Yii, Loginza. Но в статье о Loginza, речь шла о протоколе обмена данными с сервисом, а вопрос аутентификации остался «за бортом». Я, конечно, объяснил когда нужно создавать сессию, но на практике этого явно недостаточно В этой статье я постараюсь исправить этот недостаток и покажу пример аутентификации пользователя с помощью сервиса Loginza. Прежде всего, определим требования к такой системе. 1) Она не должна нарушать работу стандартной системы аутентификации (с использованием логина и пароля). 2) Должны поддерживаться стандартные средства Yii для работы с пользователями. Речь о компоненте Yii::app()->user (CWebUser). 3) Завершение сеанса (Yii::app()->user->logout()) должно работать независимо от того каким образом была выполнена аутентификация. 4) Если посетитель впервые зашел на сайт и успешно прошел аутентификацию с помощью Loginza, для него нужно автоматически создать аккаунт. 5) Нужна возможность удобно показывать ссылку «Войти с помощью Loginza» на любой странице сайта (виджет). 6) После аутентификации пользователь должен вернуться на исходную страницу. Чтобы лучше представить фронт работ, рассмотрим алгоритм аутентификации фреймворка Yii. 1. Посетитель кликает по кнопке «Войти с помощью Loginza». 2. Появляется виджет в котором пользователь выбирает сервис аутентификации. 3. Loginza проводит аутентификацию и возвращает посетителя на наш сайт. При этом в массиве $_POST передается token, с помощью которого можно получить результаты аутентификации пользователя. 4. Наше приложение должно. 4.1. Получить данные от сервиса Loginza. 4.2. Создать пользователя (экземпляр класса, реализующий интерфейс IUserIdentity). Этот класс содержит метод authenticate в котором мы проверим, существует ли данный пользователь в БД, если нет – создадим его, и установим данные, которые необходимы для работы класса CWebUser. 4.3. Выполнить аутентификацию. Т. е. вызвать Yii::app()->user->login. При этом в первом параметре метода login мы передаем экземпляр класса, реализующего IUserIdentity (который мы создали на предыдущем этапе). Таким образом, мы обеспечим нормальную работу нашего класса со всеми остальными компонентами фреймворка. Переходим к реализации. Шаг 1. Создадим виджет, показывающий ссылку «Войти с помощью Loginza». Он будет состоять из двух файлов: 1) protected/components/LoginzaWidget. php – класс виджета 2) protected/components/views/loginzaWidget. php – представление. Рассмотрим класс виджета.
Понравилась статья? Получай обновления и будь всегда в курсе событий!