Чат Telegram
Группа ВКонтакте
Авторизация в Symfony через социальные сети. Часть 2: авторизация через Github

Авторизация в Symfony через социальные сети. Часть 2: авторизация через Github

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

Создание приложения

Чтобы воспользоваться API гитхаба, нам так же, как и с Google, нужно зарегистрировать приложение и получить наш публичный id и секретный ключ, по которым Github будет нас идентифицировать и давать доступ нашему приложению к данным его пользователей. Для этого перейдите по следующей ссылке. В поле Homepage URL напишем адрес нашего локального приложения, то есть http://localhost:8000, а в Authorization callback URL - http://localhost:8000/github/auth.

Конфигурация

Как видите, протокол OAuth работает везде одинаково. После создания приложения вы получите Client ID и Client Secret. Сохраняем их в .env файле под следующими ключевыми словами:

Код доступен только после покупки курса по фреймворку Symfony 4.

А в файл config/packages/knpu_aouth2_client.yaml добавляем следующие настройки:

Код доступен только после покупки курса по фреймворку Symfony 4.

Теперь наше приложение готово, осталось написать новый Guard, который будет обрабатывать соответствующий роут, куда будут приходить данные о пользователе, и сохранять данные в базу, а также аутентифировать его.

Реализация

По примеру из прошлого урока добавим 2 таких же экшена для Github в наш OAuthController.

Код доступен только после покупки курса по фреймворку Symfony 4.

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

Теперь напишем наш Guard по такому же приему, как и для Google.

Код доступен только после покупки курса по фреймворку Symfony 4.

Как вы могли заметить, тут есть небольшая разница с прошлым Guard'ом, а именно - методы onAuthenticationFailure и onAuthenticationSuccess теперь возвращают не null, а конкретный респонс. Для чего это было сделано? Дело в том, что если вам понадобится реализовать функциональность remember_me и хранить данные об авторизации пользователя не только в сессии, но и в куках, вам нужно вернуть конкретный респонс из этих методов, как просит Symfony.

Теперь нам осталось настроить файл config/packages/security.yaml:

Код доступен только после покупки курса по фреймворку Symfony 4.

Помимо того, что мы добавили новый Guard в наш список, мы также добавили такую настройку как entry_point. Дело в том, что когда у нас в системе есть несколько разных аутентификаторов, занимающихся авторизацией по апи, через социальные сети или с простой формы, нам нужно определить один из них как главный, прописав его в entry_point. Также мы добавили функциональность remember_me, благодаря которой пользователь будет аутентифицирован целый год.

Теперь у вас можем выскочить ошибка при авторизации через гугл, так как методы onAuthenticationFailure и onAuthenticationSuccess по-прежнему возвращают null. Исправим это:

Код доступен только после покупки курса по фреймворку Symfony 4.

На этом все. В следующих статьях мы начнем глубже знакомиться с Doctrine и отношениями между сущностями.

Онлайн обучение PHP
Путь с полного нуля до джуниора!
Начать бесплатно
Курс программирования на PHP
Подготовка до уровня устройства на работу!
Начать бесплатно
Самый понятный курс PHP
Онлайн-уроки в удобное время!
Начать бесплатно
Онлайн-курсы PHP и MySQL
Обучение с полного нуля до уровня джуниора!
Начать бесплатно
loader
Онлайн-курсы PHP и MySQL
Обучение с полного нуля до уровня джуниора!
Начать бесплатно
loader
Логические задачи с собеседований