KOTOFF.NET
  • Главная
  • Пользователи
  • Контакты
  • Статистика
  • Правила
  • О нас
  • Вход / Регистрация

Авторизация на сайте с помощью ВК, простой и понятный способ на PHP!

Статьи / PHP



В данной статье Вас ждет действительно рабочий,а самое главное понятный туториал, как сделать авторизацию с помощью ВК!

Я заинтересовался как сделать авторизацию, почитав официальную документацию понял, что ничего не понял. и так давайте приступим. 

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

1. Переходим на сайт https://vk.com/apps?act=manage и создаем новое приложение:

2. Заполняем следующие данные:
Название: Любое, его видно только во время авторизации, например авторизовавшись на нашем сайте с помощью ВК, Вы видите это, без количества участников.
Платформа: Выбираем «Сайт»
Адрес сайта: Ссылка на ваш сайт
Базовый домен: Ссылка на ваш сайт


Отлично, нажимаем подключить сайт.

3. Переходим в настройки приложения, копируем ID приложения и Защищенный ключ, сохраняем куда-нибудь и на этом работа на стороне ВК окончена, переходим к написанию скрипта.

4. Теперь самое интересное, нам нужно написать скрипт (обработчик), давайте создадим на нашем сервере в корне сайта файл auth.php и приступим к его редактированию. Хочу отметить, что на локальном сервере (OpenServer) авторизация работать не будет!

Открываем файл, я использую для этого PHPStorm и давайте создадим несколько переменных с пояснениями:
$client_id = 7157110; // ID приложения
$client_secret = 'ESlBJHmVMbeh8IVLiBDv'; // Защищённый ключ
$redirect_uri = 'http://royera.ru/auth.php'; // Адрес сайта


Тут все понятно, подставляем параметры из нашего приложения, ссылку указывать полностью, где лежит сам скрипт.

Далее формируем ссылку, которая будет ввести на сайт ВК с передаваемыми параметрами:

    $url = 'http://oauth.vk.com/authorize'; // Ссылка для авторизации на стороне ВК

    $params = [ 'client_id' => $client_id, 'redirect_uri'  => $redirect_uri, 'response_type' => 'code']; // Массив данных, который нужно передать для ВК содержит ИД приложения код, ссылку для редиректа и запрос code для дальнейшей авторизации токеном
echo $link = '<p><a href="' . $url . '?' . urldecode(http_build_query($params)) . '">Аутентификация через ВКонтакте</a></p>';

 Теперь можно открыть сайт скопировав $redirect_uri


Ссылка сформирована, теперь нужно получить и обработать ответ от ВК, после того как пользователь перешел по ссылке:
if (isset($_GET['code'])) {
    $result = true;
    $params = [
        'client_id' => $client_id,
        'client_secret' => $client_secret,
        'code' => $_GET['code'],
        'redirect_uri' => $redirect_uri
    ];

    $token = json_decode(file_get_contents('https://oauth.vk.com/access_token' . '?' . urldecode(http_build_query($params))), true);

    if (isset($token['access_token'])) {
        $params = [
            'uids' => $token['user_id'],
            'fields' => 'uid,first_name,last_name,screen_name,sex,bdate,photo_big',
            'access_token' => $token['access_token'],
            'v' => '5.101'];

        $userInfo = json_decode(file_get_contents('https://api.vk.com/method/users.get' . '?' . urldecode(http_build_query($params))), true);
        if (isset($userInfo['response'][0]['id'])) {
            $userInfo = $userInfo['response'][0];
            $result = true;
        }
    }

    if ($result) {
        echo "ID пользователя: " . $userInfo['id'] . '<br />';
        echo "Имя пользователя: " . $userInfo['first_name'] . '<br />';
        echo "Ссылка на профиль: " . $userInfo['screen_name'] . '<br />';
        echo "Пол: " . $userInfo['sex'] . '<br />';
        echo "День Рождения: " . $userInfo['bdate'] . '<br />';
        echo '<img src="' . $userInfo['photo_big'] . '" />'; echo "<br />";

    }
}



После того как пользователь перешел по ссылке и подтвердил передачу данных, Вам на сервер в GET запросе вернется code, используя его мы запрашиваем у ВК токен пользователя, отправляем запрос в ВК с параметрами указанные в массиве 

    $params = [
        'client_id' => $client_id,
        'client_secret' => $client_secret,
        'code' => $_GET['code'],
        'redirect_uri' => $redirect_uri
    ];


ВК возвращает нам токен пользователя, его можно сохранить в базу данных.

Теперь следующим запросом мы получаем данные о пользователе, используя его токен и обращаясь к API VK https://api.vk.com/method/users.get мы получаем json от VK, который мы можем распарсить. Давайте попробуем авторизоваться, заходим на нашу страницу и нажимаем авторизация:


Разрешаем и у нас на сайте появляются данные об аккаунте:



Авторизация работает. Далее можете сохранить ID в сессию и проверять авторизован пользователь или нет. Давайте доработаем код:

В самый конец добавляем:
$_SESSION['id'] = $userInfo['id'];

А ссылку заменяем на:

    if(empty($_SESSION['id'])) {

        echo "Вы уже авторизованы";
        

    } else {


    echo $link = '<p><a href="' . $url . '?' . urldecode(http_build_query($params)) . '">Аутентификация через ВКонтакте</a></p>';
    }

Весь код:

<?php

$client_id = 7157110; // ID приложения
$client_secret = 'ESlBJHmVMbeh8IVLiBDv'; // Защищённый ключ
$redirect_uri = 'http://royera.ru/auth.php'; // Адрес сайта

$url = 'http://oauth.vk.com/authorize'; // Ссылка для авторизации на стороне ВК

$params = [ 'client_id' => $client_id, 'redirect_uri'  => $redirect_uri, 'response_type' => 'code']; // Массив данных, который нужно передать для ВК содержит ИД приложения код, ссылку для редиректа и запрос code для дальнейшей авторизации токеном

if(empty($_SESSION['id'])) {

    echo "Вы уже авторизованы";

} else {

    echo $link = '<p><a href="' . $url . '?' . urldecode(http_build_query($params)) . '">Аутентификация через ВКонтакте</a></p>';
}

if (isset($_GET['code'])) {
    $result = true;
    $params = [
        'client_id' => $client_id,
        'client_secret' => $client_secret,
        'code' => $_GET['code'],
        'redirect_uri' => $redirect_uri
    ];

    $token = json_decode(file_get_contents('https://oauth.vk.com/access_token' . '?' . urldecode(http_build_query($params))), true);

    if (isset($token['access_token'])) {
        $params = [
            'uids' => $token['user_id'],
            'fields' => 'uid,first_name,last_name,screen_name,sex,bdate,photo_big',
            'access_token' => $token['access_token'],
            'v' => '5.101'];

        $userInfo = json_decode(file_get_contents('https://api.vk.com/method/users.get' . '?' . urldecode(http_build_query($params))), true);
        if (isset($userInfo['response'][0]['id'])) {
            $userInfo = $userInfo['response'][0];
            $result = true;
        }
    }

    if ($result) {
        echo "ID пользователя: " . $userInfo['id'] . '<br />';
        echo "Имя пользователя: " . $userInfo['first_name'] . '<br />';
        echo "Ссылка на профиль: " . $userInfo['screen_name'] . '<br />';
        echo "Пол: " . $userInfo['sex'] . '<br />';
        echo "День Рождения: " . $userInfo['bdate'] . '<br />';
        echo '<img src="' . $userInfo['photo_big'] . '" />'; echo "<br />";

    }
}

$_SESSION['id'] = $userInfo['id'];


Авторизация через ВК готова! Скачать исходник можно ниже

auth.rar
Остались вопросы? Задавай в комментарии, всегда рады помочь!
  • Сергей Котов
  • 03.10.2019
  • 40 530
  • 27
Как создать бота Вконтакте с кнопками (keyboard)
Как создать бота Вконтакте с кнопками (keyboard)
1-04-2019, 23:36, Статьи / PHP
[Часть 1] Написание своего сайта. Регистрация и Авторизация
[Часть 1] Написание своего сайта. Регистрация и Авторизация
21-07-2019, 19:03, Статьи / PHP
Загружаем скрипты на бесплатный хостинг с PHP и MySQL. Подойдет для скриптов бота ВК
Загружаем скрипты на бесплатный хостинг с PHP и MySQL. Подойдет для скриптов бота ВК
24-01-2019, 04:11, Статьи
C 28 декабря ICQ перестает поддерживать старые версии
C 28 декабря ICQ перестает поддерживать старые версии
24-12-2018, 18:07, Новости
  1. cосиска

    cосиска Гость 5 ноября 2019 14:23

    Пишет то, что я авторизован
    1. Сергей Котов

      Сергей Котов@Сергей Котов 5 ноября 2019 16:16

      замените empty на isset

      if(empty($_SESSION['id'])) {


      на

      if(isset($_SESSION['id'])) {
      1. Икг

        Икг Гость 12 июня 2021 12:33

        или на 
        if(!empty($_SESSION['id'])) {

  2. Help_me_please

    Help_me_please@Александр 20 марта 2020 15:12

    А как добавить $token в базу Данных  MySql? 
    1. Petrov

      Petrov Гость 1 ноября 2022 11:15

      Через SQL запрос

  3. Сергей

    Сергей Гость 7 июля 2020 22:51

    Парни, почему выползает ошибка Parse error: syntax error, unexpected '$client_secret' (T_VARIABLE)
    Делаю всё по шаблону а тут сразу такое 

    1. Сергей

      Сергей Гость 6 августа 2021 11:36

      Здравствуйте, все же понятно он жалуется на то что у вас не правильный секретный ключ

  4. Сергей

    Сергей Гость 8 июля 2020 00:43

    Теперь проблема в то что когда авторизируешь и обновляешь страничку выпадает ошибка Warning: file_get_contents(https://oauth.vk.com/access_token?client_id=7533058&clien
    t_secret=glC9P5bqNfZi3WOOYb3r&code=02b6d7a05e589d4edf&redirect_uri=http
    ://mebelfomin.ru/feedback.php): failed to open stream: HTTP request failed! HTTP/1.1 401 Unauthorized in

    А так же если перейти на другую страницу то авторизация пропадает не сохраняется и опять надо по ссылке переходить, кто подскажет что за проблема?

  5. Niko Izo

    Niko Izo Гость 11 августа 2020 18:50

    Спасибо большое за эту статью, я все статьи перековырял, и помогла только эта! Благодарен Вам, искренне!
  6. Клим Черемных

    Клим Черемных@Клим Черемных 2 января 2021 01:55

    я хочу чтобы после того как пользователь авторизовался, его кинуло на другую страницу и запомнило этого пользователя, как написано в гайде: можно сохранить токен. как это сделать? и как выводить инфу о пользователе на другой странице?
    1. Сергей Котов

      Сергей Котов@Сергей Котов 5 января 2021 19:26

      Для  этого нужно писать целую статью, можете подождать или написать мне в вк
  7. Гость кирилл

    Гость кирилл Гость 23 февраля 2021 19:36

    {"error":"invalid_request","error_description":"redirect_uri is incorrect, check application redirect uri in the settings page"}  Вылетает вот это ошибка как решить?
    1. Сергей Котов

      Сергей Котов@Сергей Котов 24 февраля 2021 22:59

      В настройках приложения какой урл для редиректа указали?
  8. Дмитрий

    Дмитрий Гость 8 марта 2021 23:48

    А как сделать через другие сети?
    1. Сергей Котов

      Сергей Котов@Сергей Котов 10 марта 2021 13:00

      у каждой соц сети, гугла и прочих есть документация, в целом все почти аналогично 
  9. рамиль

    рамиль Гость 18 марта 2021 22:09

    Как записать ?code = в базу данных MySQL?
    1. Сергей

      Сергей Гость 6 августа 2021 11:39

      А зачем? Если он всегда разный
    2. Сергей Котов

      Сергей Котов@Сергей Котов 6 августа 2021 20:31

      Нужно записывать токен в базу данных, если планируется в дальнейшем обращаться к API VK, code нужен лишь на этапе получения токена
  10. Владимир Ф

    Владимир Ф@Владимир Федотов 27 октября 2021 13:04

    Как же всетки сохранить токен в базу?
  11. Ислам

    Ислам Гость 8 марта 2022 10:50

    Мне пишет бл:
    Страница не найдена
    На главную

    что делать??? сайт нвути :(

    Вот сайт epic-win.ru (не реклама) помогите прошу

    . - 404 error (epic-win.ru)

    <li class="col"><div id="uLogin" data-ulogin="display=buttons;fields=photo_big,first_name,last_name;mobilebutto
    ns=0;redirect_uri=<?=$is_https?>%3A%2F%2F<?=$_SERVER['HTTP_HOST']?&g
    t;/auth.php;"><a href="#" data-uloginbutton="vkontakte" style='width:100%' class="btn btn-outline btn-dark btn-facebook btn-block"><i class="fab fa-vk" style='color:#2c80ff;' aria-hidden="true"></i><span>Вконтакте</span></a>&
    lt;/div></li>
                                  вот скрипт помогите прошу

  12. fk

    fk Гость 2 октября 2022 16:17

    Ошибка {"error":"invalid_client","error_description":"client_id is incorrect"} что делать?

    1. Сергей Котов

      Сергей Котов@Сергей Котов 6 октября 2022 16:38

      client_id is incorrect - ИД приложения верно указали?

  13. Гость Александр

    Гость Александр Гость 22 марта 2023 18:27

    {"error":"invalid_request","error_description":"redirect_uri is incorrect, check application redirect uri in the settings page"}

  14. Алекс

    Алекс Гость 13 апреля 2023 17:38

    Ну и ни хрена себе ПРОСТОЙ способ!

    1. tujh

      tujh Гость 9 октября 2023 10:09

      да я сам вообще ахуел внатуре 

  15. Кирилл Михайлов

    Кирилл Михайлов@Кирилл Михайлов 28 марта 2024 07:26

    1. в самое начало надо добавить session_start(); а иначе каждый раз просит авторизоваться
    2. последнюю строку с $_SESSION['id'] = $userInfo['id']; надо поместить внутрь if ($result) { }

  16. Валентин

    Валентин Гость 10 января 2025 18:49

    Страница для авторизации http://oauth.vk.com/authorize - не существует.

    Метод не актуален

{login}

Твой комментарий..

Заказывай!
Разработка ботов на заказ, любой сложности, обращаться:
 VK KOTOFF.net - Сообщество, в личные сообщения или по контактам указанным там 
 mail: [email protected]

Рекламный блок
  • Новости
  • Платная категория
  • Блог
  • Игры
  • Обновления
  • Программы
  • Статьи
    • PHP
    • Python
    • JS
  • Дизайн
    • PSD исходники
  • DLE
    • Шаблоны
    • Модули
    • Хаки
  • Магазин
    • Скрипты
Комментарии
Система комментариев на PHP
Полезная статья
Создание простого Telegram-бота с клавиатурой и inline-кнопками [Часть 2]
Класс, хорошая тема
Динамическая обложка для группы ВК, последний подписчик, топ комментатор и прочее
Как отключить вывод результата cron в папку modules/cron в Open Server? Крон запускает несколько
Динамическая обложка для группы ВК, последний подписчик, топ комментатор и прочее
Планируете ли вернуться к динамической обложке?
Скрипт для скачивания видео с YouTube на PHP
Уже не работает.
Все комментарии..
Полный список последних комментариев
Лучшие новости
Всего публикаций: 115
Добавлено за сутки: +0
Записей в блоге: 1
Добавлено за сутки: +0
Комментариев: 936
Добавлено за сутки: +0
Пользователей: 4124
Добавлено за сутки: +0
Полная статистика..
Подробная статистика сайта
Loading...

Нашли ошибку?
Вы можете сообщить об этом администрации.
Выделив текст нажмите CTRL+Enter

Полезные ссылки
  • О проекте
  • Наши контакты
  • Администрация
  • Рекламные материалы
  • Идеи и предложения
  • Ответы на вопросы
Информация
  • Условия сделки
  • Способы оплаты
  • Поддержка / F.A.Q
  • Онлайн документация
  • Статистика сайта
  • Список пользователей
Услуги/Работа
  • Разработка ботов ВК
  • Обновление проекта
  • Консультация/поддержка
KOTOFF.net

Copyright © Footer 2019-2023. All right reserved.
KOTOFF.net - Уроки по PHP, SQL, IT новости
Быстрый вход

Используйте социальные сети для быстрой регистрации и авторизации.

Google
ВКонтакте
Яндекс
Mail.ru
Создать аккаунт / Регистрация
Авторизация

Я забыл свой пароль