Как сделать авторизацию через вк php
Вход на сайт через Вконтакте
Многие соцсети позволяют создавать приложения и через API получать данные пользователей, поэтому их использует для быстрой регистрации и авторизации на сайтах. Как проходит аутентификация, рассмотрим на примере VK:
Регистрация приложения
Для начала нужно создать приложение на странице https://vk.com/editapp?act=create
В меню «Платформа» нужно указать – сайт, заполнить поля «адрес сайта» и «основной домен».
В настройках видим ID приложения и защищённый ключ, также нужно убедится что приложение включено и видно всем.
Ссылка для входа
Сформируем и выведем ссылку по которой пользователь даст разрешение на запрошенные действия.
В redirect_uri указываем скрипт-обработчик, туда придет секретный код.
В параметре state можно передать URL текущей страницы, чтобы вернуть пользователя обратно.
При переходе по ссылке откроется страница:
Получение данных
redirect_uri должен быть такой же как в ссылке для входа.
Полученные данные пользователя
Далее все завит от реализации сайта, пользователя можно добавить в БД или обновить его данные и авторизовать в системе.
Авторизация на сайте с помощью ВК, простой и понятный способ на PHP!
В данной статье Вас ждет действительно рабочий,а самое главное понятный туториал, как сделать авторизацию с помощью ВК!
Я заинтересовался как сделать авторизацию, почитав официальную документацию понял, что ничего не понял. и так давайте приступим.
Если Вы заинтересованы в этом вопросе, как же все-таки сделать авторизацию используя ВК, то у Вас уже есть сайт, или как минимум вы обладаете базовыми знаниями. Для начала нам нужно создать приложение Вконтакте, самый простой шаг.
1. Переходим на сайт https://vk.com/apps?act=manage и создаем новое приложение:
2. Заполняем следующие данные:
Название: Любое, его видно только во время авторизации, например авторизовавшись на нашем сайте с помощью ВК, Вы видите это, без количества участников.Платформа: Выбираем «Сайт»
Адрес сайта: Ссылка на ваш сайт
Базовый домен: Ссылка на ваш сайт
Отлично, нажимаем подключить сайт.
3. Переходим в настройки приложения, копируем ID приложения и Защищенный ключ, сохраняем куда-нибудь и на этом работа на стороне ВК окончена, переходим к написанию скрипта.
4. Теперь самое интересное, нам нужно написать скрипт (обработчик), давайте создадим на нашем сервере в корне сайта файл auth.php и приступим к его редактированию. Хочу отметить, что на локальном сервере (OpenServer) авторизация работать не будет!
Открываем файл, я использую для этого PHPStorm и давайте создадим несколько переменных с пояснениями:
Тут все понятно, подставляем параметры из нашего приложения, ссылку указывать полностью, где лежит сам скрипт.
Далее формируем ссылку, которая будет ввести на сайт ВК с передаваемыми параметрами:
Ссылка сформирована, теперь нужно получить и обработать ответ от ВК, после того как пользователь перешел по ссылке:
После того как пользователь перешел по ссылке и подтвердил передачу данных, Вам на сервер в GET запросе вернется code, используя его мы запрашиваем у ВК токен пользователя, отправляем запрос в ВК с параметрами указанные в массиве
ВК возвращает нам токен пользователя, его можно сохранить в базу данных.
Теперь следующим запросом мы получаем данные о пользователе, используя его токен и обращаясь к API VK https://api.vk.com/method/users.get мы получаем json от VK, который мы можем распарсить. Давайте попробуем авторизоваться, заходим на нашу страницу и нажимаем авторизация:
Разрешаем и у нас на сайте появляются данные об аккаунте:
Авторизация работает. Далее можете сохранить ID в сессию и проверять авторизован пользователь или нет. Давайте доработаем код:
В самый конец добавляем:
А ссылку заменяем на:
Авторизация через ВК готова! Скачать исходник можно ниже
Авторизация через ВКонтакте на PHP
В этой статье вы узнаете как делается авторизация через ВКонтакте на языке программирования PHP, вы убедитесь, что это очень просто.
Создание приложения во ВКонтакте:
Перед тем как начать разрабатывать авторизацию через ВК, нужно зарегистрировать наше приложение или сайт, для этого заходим во вконтакт и с левого бока должен быть пункт «разработчикам».
Также можете перейти по этой ссылки.
Там же нажимаем сверху на вкладку мои приложения.
В этой вкладки выбираем приложение и нажимаем редактировать, если нет нужного нам или вообще нет не одного, то нажимаем на кнопку «Создать приложение».
Тут думаю всё понятно, единственное, для некоторых может быть не понятным, что такое базовый домен, тут просто нужно вписать доменное имя своего сайта, нажимаем «Подключить сайт».
После того как создали сайт, заходим в настройки этого сайта и там самое главное, это три пункта, «ID приложения», «Защищённый ключ» и «Доверенный redirect URI», последнее это поле, в него вы должны вписать где будет обрабатыватся авторизация.
Делаем авторизацию через ВК:
Теперь посмотрим как делается сама авторизация через ВК на PHP, для этого, сначала нужно создать кнопку, которая будет отсылать во ВК, но перед этим сделаем файл config.php, в котором будим хранить нужные нам данные.
В этом файле просто хранятся константы нужных данных нашего приложения.
Теперь создаём страницу авторизации, вот она.
Тут просто подключаем файл «config.php» и создаём ссылку для входа через ВКонтакте.
Вы можете заметить, что во первых ссылка отсылается не на наш сайт, а на какую то страницу во ВК, и во вторых это три значения в GET, давайте разберём это.
Потом когда мы перейдём где будем обрабатывать основную авторизацию, у нас будет GET запрос, но об этом позже.
Примечание:
Если вам не понятна работа с GET запросами и вообще с формой, то посмотрите эту часть нашего учебника по PHP: PHP работа с формой.
Вот как у нас выглядит страница.
Теперь перейдём к обработчику авторизации и получению данных пользователя.
Тут уже всё сложнее, сперва мы проверяем, есть ли вообще код, для последующей работе с авторизацией, если нет, то прерываем программу, если да, то делаем URL запрос.
В этом GET запросе можете заметить несколько значений два из них знакомы, о них можете ознакомится выше, остальные сейчас разберём.
Важно:
После, точно так же, как и прошлый раз, отправляем этот запрос, получаем массив и выводим его, вот что должно получится.
Теперь авторизация ВКонтакте на PHP готов. Как видите всё работает как надо, теперь вам просто нужно полученные данные отправить в базу данных или например в cookie.
Если не знаете как работать с базой данных, то посмотрите наш учебник про работу с базой данных в PHP.
Вывод:
В этой статье мы разобрали как делается авторизация во ВКонтакте на языке программирования PHP, также, если вам что то не понятно, то посмотрите эти две раздела из документации ВК.
Делаем регистрацию на своем сайте через ВКонтакте
Мы начинаем цикл статей, в которых расскажем и покажем как сделать для своего сайта очень удобный функционал регистрации и/или авторизации для ваших пользователей на вашем сайте через социальные сети ВКонтакте, Одноклассники, Яндекс, Google и Mail.ru.
В данной статье рассмотрим регистрацию на сайте через социальную сеть ВКонтакте.
Создайте в корне своего сайта 2 папки, например social_login и social_login_callback. В первой будут храниться файлы для использования их в качестве прямых ссылок на инициализацию аутентификации в социальной сети, а во второй обработчики ответов от социальных сетей
Создайте новое приложение в социальной сети ВКонтакте
В открывшейся форме введите название приложения, выберите тип “Веб-сайт”, укажите адреса сайта и базовый домен сайта.
После нажатия на кнопку “Подключить сайт”, вам придётся ввести проверочный код, который придёт по смс. После ввода кода, перейдите в раздел Настройки.
Из данной формы нам понадобятся такие данные, как `ID приложения`, `Защищённый ключ`, `Доверенный redirect URI:`.
Доверенный redirect URI: вам нужно прописать полный путь к файлу обработчика ответа от социальной сети, в нашем случае: https://seolik.ru/social_login_callback/vk.php
Обратите внимание, что такие данные как `Защищённый ключ` в примере у нас изменены на фиктивные, так как публикация реальных данных поля `Защищённый ключ` может повлечь за собой удаление приложения или даже вашего аккаунта в социальной сети.
Создаем файл vk.php в папке social_login (пример можно будет скачать в конце статьи) и записываем в него код:
Теперь у нас готова ссылка при переходе по которой пользователь инициирует авторизацию через социальную сеть, а именно ссылка имеет вид https://site.ru/social_login/vk.php
Для того, чтобы получить ответ от социальной сети и email юзера создадим файл vk.php, но теперь в папке social_login_callback и запишем в него следующий код:
Т.е теперь при успешном ответе от социальной сети, если юзер разрешил доступ к своей информации и у него указан email в настройках профиля, в ответе вы получите данные о нем, в том числе и его email. Ну а дальше дело за вами, создавайте для него аккаунт у вас на сайте на основе его email.
Как сделать авторизацию через вк php
Создайте объект VKApiClient с помощью следующего кода:
Также Вы можете инициализировать VKApiClient с другой версией API или другим языком, например:
$vk = new VKApiClient(‘5.95’);
$vk = new VKApiClient(‘5.95’, VKLanguage::ENGLISH);
SDK предоставляет возможность авторизации на основе протокола OAuth 2.0 в API ВКонтакте. Пожалуйста, ознакомьтесь с полной документацией перед началом работы.
OAuth 2.0 Authorization Code Flow позволяет обращаться к методам API с серверной стороны Вашего приложения.
Эта схема состоит из двух шагов — получение code и обмен code на ключ доступа. В первую очередь вы должны получить code (инструкция для авторизации пользователя, инструкция для авторизации сообщества), перенаправив пользователя на страницу авторизации следующим образом:
Создайте объект VKOAuth:
$oauth = new VKOAuth();
$client_id = 1234567;
$redirect_uri = ‘https://example.com/vk’;
$display = VKOAuthDisplay::PAGE;
$scope = array(VKOAuthUserScope::WALL, VKOAuthUserScope::GROUPS);
$state = ‘secret_state_code’;
$oauth = new VKOAuth();
$client_id = 1234567;
$redirect_uri = ‘https://example.com/vk’;
$display = VKOAuthDisplay::PAGE;
$scope = array(VKOAuthGroupScope::MESSAGES);
$state = ‘secret_state_code’;
$groups_ids = array(1, 2);
После успешной авторизации браузер перенаправит пользователя на указанный redirect_uri. code будет передан в GET-параметре на указанный Вами адрес:
Затем используйте этот метод для получения access_token:
$oauth = new VKOAuth();
$client_id = 1234567;
$client_secret = ‘SDAScasd’
$redirect_uri = ‘https://example.com/vk’;
$code = ‘CODE’;
redirect_uri должен совпадать с тем, который использовался на первом шаге.
В отличие от Authorization Code Flow, эта схема позволяет получить ключ доступа с ограниченным сроком действия.
В первую очередь создайте объект VKOauth:
$oauth = new VKOAuth();
$client_id = 1234567;
$redirect_uri = ‘https://example.com/vk’;
$display = VKOAuthDisplay::PAGE;
$scope = array(VKOAuthUserScope::WALL, VKOAuthUserScope::GROUPS);
$state = ‘secret_state_code’;
$revoke_auth = true;
Чтобы согласие пользователя запрашивалось в любом случае (даже если он уже давал права приложению), передавайте revoke_auth со значением true.
$oauth = new VKOAuth();
$client_id = 1234567;
$redirect_uri = ‘https://example.com/vk’;
$display = VKOAuthDisplay::PAGE;
$scope = array(VKOAuthGroupScope::MESSAGES);
$state = ‘secret_state_code’;
$groups_ids = array(1, 2);
Параметры аналогичны пункту 4.2.1.
После успешной авторизации браузер перенаправит пользователя на указанный redirect_uri. access_token будет передан как фрагмент на указанный Вами адрес:
Для ключа доступа пользователя
Для ключа доступа сообщества
access_token — новый ключ доступа.
expires_in — срок действия ключа доступа в секундах.
user_id — идентификатор пользователя.
state — строка, переданная в запросе авторизации.
access_token_XXXXXX — ключ доступа сообщества, где XXXXXX — идентификатор сообщества.
Список всех методов API Вы можете найти на этой странице.
Пример вызова метода users.get:
Пожалуйста, прочитайте полное руководство перед началом работы.
Вызовите photos.getMessagesUploadServer, чтобы получить адрес для загрузки файла:
Затем используйте метод upload(),чтобы отправить файлы на полученный upload_url:
В ответе Вы получите JSON-объект с полями server, photo, hash. Чтобы сохранить фотографию, вызовите метод photos.saveMessagesPhoto с этими тремя параметрами:
Пожалуйста, прочитайте полное руководство перед началом работы.
Вызовите метод video.save, чтобы получить адрес для загрузки файла:
Затем используйте метод upload(),чтобы отправить файл на полученный upload_url:
Некоторое время после загрузки видео находится в процессе обработки.
Включите Bots Long Poll API в Вашем сообществе и укажите события, которые нужно отслеживать, с помощью этого метода:
$vk = new VKApiClient();
$vk->groups()->setLongPollSettings($access_token, array(
‘group_id’ => 159895463,
‘enabled’ => 1,
‘message_new’ => 1,
‘wall_post_new’ => 1,
));
Переопределите методы из VKCallbackApiHandler, чтобы отслеживать события:
Чтобы начать отслеживание событий в Long Poll, создайте экземпляр класса CallbackApiMyHandler, класа VKCallbackApiLongPollExecutor, и вызовите метод listen():
$vk = new VKApiClient();
$access_token = ‘asdj4iht2i4ntokqngoiqn3ripogqr’;
$group_id = 159895463;
$wait = 25;
Параметр wait соответствует периоду «ожидания» запроса.
В вызове функции listen() Вы также можете задать номер события, начиная с которого нужно получать обновления. Значение по умолчанию — номер последнего события.
$vk = new VKApiClient();
$access_token = ‘asdj4iht2i4ntokqngoiqn3ripogqr’;
$group_id = 159895463;
$ts = 12;
$wait = 25;
Подробную информацию о Callback API Вы можете найти на этой странице.
Вам нужно настроить Callback API в разделе «Управление сообществом» Вашей группы или публичной страницы.
В первую очередь Вам необходимо подтвердить адрес сервера. ВКонтакте отправляет запрос на Ваш сервер с типом события confirmation, в ответ на которое необходимо вернуть контрольную строку (код подтверждения). На все другие типы уведомлений Ваш сервер должен отвечать строкой «ok».
class ServerHandler extends VKCallbackApiServerHandler <
const SECRET = ‘ab12aba’;
const GROUP_ID = 123999;
const CONFIRMATION_TOKEN = ‘e67anm1’;
$handler = new ServerHandler();
$data = json_decode(file_get_contents(‘php://input’));
$handler->parse($data);
Чтобы обрабатывать события, переопределите методы из класса VKCallbackApiServerHandler.
Обработчик события confirmation содержит два аргумента: идентификатор сообщества и секретный ключ. Вам необходимо переопределить его.