Extension:SocialLogin/SocialLoginPlugin/ru

Принцип работы протокола OAuth 2.0
Протокол OAuth 2.0 — это протокол взаимодействия клиентского приложения, пользователя и сервера. Основная последовательность взаимодействия этих сущностей представлена на диаграмме справа.

User flow
Работу пользователя с протоколом OAuth 2.0 можно представить в виде последовательности следующих шагов:
 * 1) Переадресация пользователя на страницу предоставления прав клиентскому приложению на указанные права.
 * 2) Пользователь авторизирует клиентское приложения и разрешает использование тех или иных личных данных.
 * 3) После авторизации клиентское приложение переадресовывает пользователя на предустановленную страницу, при этом происходит передача параметра access_token, который используется для дальнейшего взаимодействия с сервером.

Server flow
Для взаимодействия стороннего сервера с клиентским приложением и сервером OAuth эта последовательность преобретает другой вид:
 * 1) Переадресация пользователя на страницу предоставления прав клиентскому приложению на указанные права.
 * 2) Пользователь авторизирует клиентское приложения и разрешает использование тех или иных личных данных.
 * 3) После авторизации клиентское приложение переадресовывает пользователя на предустановленную страницу, при этом происходит передача параметра code, который используется для получения параметра access_token.
 * 4) Сторонний сервер отправляет запрос серверу OAuth, передавая параметр code, а в ответ получает параметр access_token, который используется для дальнейшего взаимодействия с сервером.

Написание собственного плагина
Для того чтобы создать собственный плагин взаимодействия с сервером OAuth 2.0 достаточно реализовать интерфейс SocialLoginPlugin. Имя классо должно быть выбрано в соответствии с названием хоста сервера OAuth, при этом символ «.» должен быть заменён на «_», например vk_com, facebook_com и т.п. Интерфейс имеет следующие методы, которые должны быть переопределены в реализуемом классе: Расширение добавляет несколько полезных функций:
 * SLgenerateName — метод генерации возможного имени пользователя для формы регистрации, который на входе ожидает массив текстовых значений — вариантов возможных имён пользователя на русском или английском языке;
 * SLgetContents — метод для совершения GET/POST запросов. На входе ожидает два параметра: обязательный параметр $url — адрес запроса и опциональный параметр $data — словарь, ключи которого являются названиями параметров, а значения — их значениями. Метод возвращает содержимое ответа.

Документированный пример плагина взаимодействия MediaWiki с VK.COM можено посмотреть здесь.

Метод login
Метод  принимает единственный параметр   и используется для получения параметра access_token и других сведений о пользователе. Данный метод должен вернуть  в случае если авторизация не удалась или, если   был валидным, массив вида: Здесь: В теле метода необходимо присвоить: Здесь:
 * id — уникальный идентификатор пользователя на сервере OAuth (часто передаётся вместе с ответом от сервера);
 * service — уникальный идентификатор сервера OAuth (рекомендуется использовать имя сайта);
 * profile — строка, образованная конкатенацией параметра id, символа '@' и параметра service;
 * name — предлагаемое имя пользователя для отображения в форме регистрации (рекомендуется использовать метод SLgenerateName);
 * email — необязательный параметр, email пользователя, необходим для отображения в форме регистрации;
 * realname — настоящее имя пользователя.
 * $access_token — access_token, который вернул сервер OAuth в ответ на валидацию параметра.

Метод check
Метод  необходим для повторного подтверждения личности пользователя в случае если после авторизации на сервере OAuth оказалось, что нет локального пользователя, который связан с аккаунтом сервера OAuth. Метод принимает единственный параметр — уникальный идентификатор пользователя, полученный методом. Данный метод должен вернуть  в случае если повторная авторизация не удалась или, если   был валидным, массив вида: Здесь:
 * id — уникальный идентификатор пользователя на сервере OAuth (часто передаётся вместе с ответом от сервера);
 * service — уникальный идентификатор сервера OAuth (рекомендуется использовать имя сайта);
 * profile — строка, образованная конкатенацией параметров id и service;
 * realname — настоящее имя пользователя;
 * access_token — access_token, полученый во время валидации параметра  (можно получить из сессии  )

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

Подключение

 * 1) После реализации интерфейса сохраните созданный класс в файле с именем, соответствующим имени хоста сервера OAuth, например vk.com.php, facebook.com.php;
 * 2) Загрузите полученный файл в папку   каталога   директории  ;
 * 3) Подключите плагин, добавив в массив $wgSocialLoginServices запись вида: