Авторизация по VK ID | Mail.ru | Одноклассники

С одной интеграцией VK ID вы получаете все три способа авторизации: через ВКонтакте, Одноклассники (ОК), Mail.ru
Image without caption

Регистрация приложения VK ID

  1. Подключить VK ID можно по ссылке https://id.vk.com/about/business
  1. Добавить приложение.
    1. Снимок экрана
  1. Введите название вашего приложения, выберите “Web” и нажмите “Далее”.
    1. Снимок экрана
  1. Укажите основной домен вашего приложения и адрес страницы куда будет происходить редирект после авторизации. В текущей инструкции перенаправление будет создано нами вручную на стороне Кремакса, так что перенаправление на стороне сервиса авторизации VK ID не играет роли.
    1. Снимок экрана
  1. Для завершения регистрации необходимо нажать “Создать приложение”.

Виджет авторизации

ВК предоставляет несколько виджетов которые можно поместить на страницу сайта. Для быстрой авторизации через ВК, Mail.ru и Одноклассники нужен код виджета “3 в 1”.
Снимок экрана
В редакторе страницы Кремакса виджет можно разместить в любом месте страницы, если добавить html-компонент и вставить код виджета во вкладку HTML.
Снимок экрана

Настройка доступа и подготовка БД

После авторизации в VK ID, ВК присылает данные пользователя которые можно использовать в качестве внутренней авторизации на сайте. В таблицу “Пользователи” нужно добавить колонки для данных пользователя из ВК. Пример данных которые запрашиваются у пользователя по умолчанию:
javascript
user: { user_id: "78318111", first_name: "Иван", last_name: "Иванов", avatar: "https://sun1-47.vkuserphoto.ru/s/v1/ig2/ZySVxbJMB6VafBwp123456", sex: 2, verified: false, birthday: "10.10.1990" }
Для запроса других данных пользователя, необходимо отредактировать параметр scope в коде виджета. Возможные значения перечислены здесь: https://id.vk.com/about/business/go/docs/ru/vkid/latest/vk-id/connection/work-with-user-info/scopes
Пример полей таблицы “Пользователи” на Кремаксе, созданные для хранения стандартной информации пользователя ВК:
Снимок экрана
Обязательным полем является только поле “VK ID”. Остальные могут быть созданы в таблице по усмотрению и служат для вывода информации самому пользователю.
Заметка: Сценарий из данной инструкции будет настроен именно на структуру таблицы представленную выше (поля: vk_id, vk_full_name, vk_avatar, vk_birthday). Если у вас планируется другая структура таблицы, то в дальнейшем необходимо будет отредактировать сценарий в соответствии.

Сценарий авторизации

После успешной авторизации в ВК, виджет ВК отправляет на сценарий специальный токен. Сценарий должен отвечать за: обмен токена на персональные данные пользователя ВК, запись данных в БД и авторизацию на Креатиуме по данным из ВК.
В сценарии необходимо заменить CLIENT_ID на ваш ID приложения.
Снимок экрана
Ссылку перенаправления в завершении сценария необходимо заменить на ссылку куда пользователь будет перенаправлен после того как авторизация пройдет успешно.
Снимок экрана
Обратите внимание, что авторизация в сценарии происходит так же как и обычная авторизация. Id записи пользователя устанавливается в сессию пользователя. VK ID пользователя сохраняется в БД только для того чтобы мы могли соотносить запись с типом авторизации и находить пользователя по VK ID при последующих авторизациях.

Связка виджета и сценария

Для того чтобы виджет отправлял токен на наш сценарий, необходимо дополнить код виджета вызовом сценария, с последующей передачей данных и перенаправлением после исполнения сценария.
Код для вставки:
javascript
cr.api(function (page) { // vk_id_avtorizaciya нужно заменить на название эндпоинта сценария авторизации page.executeBackendScenario("vk_id_avtorizaciya", { // Значения для передачи в сценарий. data: data }, {}).then((res) => { // Обработка результата который возвращает сценарий window.location.href = res; }) });
В коде виджета от ВК, код выше нужно вставить под комментарием “Обработка полученного результата”. vk_id_avtorizaciya нужно заменить на название эндпоинта вашего сценария авторизации VK ID.
Снимок экрана вставки кода
Где взять название эндпоинта
Результат: пример полного кода виджета

Завершение и тестирование

После настройки всех компонентов шаги авторизации должны выглядеть так:
  1. На странице с виджетом на публикации отображается кнопка входа по VK ID.
  1. При нажатии на один из методов авторизации VK ID, пользователь переходит в ВК для разрешения доступа к данным.
    1. Снимок экрана
  1. После нажатия “Разрешить”, пользователя перенаправляет обратно на наш сайт и запускается сценарий авторизации.
  1. Происходит перенаправление на страницу которая возвращается сценарием авторизации.
  1. (Опциональный шаг) - вывод данных пользователя, которые мы получили из ВК. После успешной авторизации данные пользователя должны были быть записаны в таблицу. На странице выводятся данные из таблицы “Пользователи”.
Пример вывода данных на странице /cabinet куда совершается перенаправление
Выход из аккаунта происходит как и с обычной авторизацией - по кнопке выхода или по истечению сессии.

Проблемы и их решение

Виджеты авторизации дублируются