Практически на каждом веб-сайте, который содержит опцию входа в систему, также есть способы входа через различные социальные сети. В этой серии статей мы рассмотрим, как мы можем убедиться, что наш посетитель может войти через Google+ и, в конечном итоге, через другие сети, такие как Twitter и Facebook. В заключительной статье мы подробно рассмотрим, как можно убедиться, что у пользователей нет разных учетных записей из-за того, что они использовали разные социальные сети.
Мы создадим независимый от фреймворка пакет, который сможет легко обрабатывать пользователей из разных социальных сетей. В этой части мы рассмотрим нашу базовую настройку.
Вы можете просмотреть код для всех статей на этой странице Github .
Создание вашего пакета
Мы начинаем с создания нашего пакета. Для этого мы просто начинаем новый проект без какого-либо контента. Сначала нам нужно определить, как называется наш поставщик. Как правило, люди используют свое имя (имя пользователя) или название компании. Я буду использовать SitePoint
качестве имени моего поставщика.
Кроме того, нам также нужно имя пакета. Это имя обычно описывает вашу посылку. Поскольку мы используем социальные сети для входа, мы будем использовать SocialLogin
качестве имени нашего пакета.
Пришло время создать нашу структуру каталогов. В общем, рекомендуется хранить ваши классы в каталоге src
. Итак, начнем с создания каталога src/SitePoint/SocialLogin
.
Мы собираемся создать файл composer.json
, чтобы легко поддерживать наши зависимости.
{ "name": "sitepoint/social-login", "type": "library", "description": "Social login functionality", "homepage": "https://www.peternijssen.nl", "license": "MIT", "authors": [ { "name": , "homepage": "https://www.peternijssen.nl" } ], "require": { "php": ">=5.3.0", "lusitanian/oauth": "0.3.*" }, "autoload": { "psr-0": { "SitePoint\\SocialLogin": "src" } }, "target-dir": "SitePoint/SocialLogin" }
Чтобы убедиться, что мы не допустили ошибок, запустите composer validate
для файла composer.json
.
Создание интерфейсов
Мы собираемся создать несколько интерфейсов, прежде чем начать работу с социальными сетями. Для этого мы создаем каталог src\SitePoint\SocialLogin\Interfaces
. В этом каталоге мы собираемся создать два интерфейса.
Мы начнем с интерфейса социальной сети. Этот интерфейс будет реализован каждым классом, который обрабатывает вход в социальную сеть.
<?php namespace SitePoint\SocialLogin\Interfaces; interface SocialLoginInterface { /** * Initializes our service */ public function init(); /** * Returns the login url for the social network * * @return string */ public function getLoginUrl(); /** * Handles the login callback from the social network * * @param string $accessToken * * @return SocialUserInterface */ public function loginCallback($accessToken); }
Метод init
инициализирует конфигурацию входа в нашу социальную сеть. getLoginUrl
вернет URL-адрес, на который перенаправляется пользователь, когда он входит в социальную сеть. Метод LoginCallback
необходимо вызывать всякий раз, когда вы получаете ответ из социальной сети. Этот метод вернет пользователя.
Следующий интерфейс — это социальный пользовательский интерфейс. Из каждой социальной сети мы получим много данных о пользователе. Создав класс, который нормализует эти данные, мы можем легко их прочитать и обработать.
namespace SitePoint\SocialLogin\Interfaces; interface SocialUserInterface { /** * Get the provider name * * @return string */ public function getProvider(); /** * Get the UID of the user * * @return string */ public function getUid(); /** * Get the first name of the user * * @return string */ public function getFirstname(); /** * Get the last name of the user * * @return string */ public function getLastname(); /** * Get the username * * @return string */ public function getUsername(); /** * Get the emailaddress * * @return string */ public function getEmailAddress(); /** * Get the city * * @return string */ public function getCity(); /** * Get the birthdate * * @return string */ public function getBirthDate(); /** * Get the gender * * @return string */ public function getGender(); }
Требуемые пакеты
Все общение с социальными сетями будет проходить по так называемому протоколу OAuth. Вместо того, чтобы разрабатывать эту часть самостоятельно, мы будем использовать уже существующую библиотеку.
Запустите composer require lusitanian/oauth:0.3.*
для установки этой библиотеки в командной строке composer require lusitanian/oauth:0.3.*
.
Вывод
Наша настройка пакета завершена прямо сейчас. В следующей статье я покажу вам, как вы можете войти через Google+. В заключительной статье мы погрузимся в объединение учетных записей вместе.