Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
52 / 5 / 1
Регистрация: 11.09.2018
Сообщений: 318

Авторизация через VK ID

05.12.2025, 20:48. Показов 663. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята, здравствуйте! Не знаю, в тот ли раздел пишу. Если нет, заранее извиняюсь Но поскольку мне нужно получить данные и обработать их на PHP, пишу сюда.

А нужно мне сделать авторизацию на сайте и получить данные о пользователе: его id, имя и фамилия и аватарка в соцсети Вконтакте. Oauth они прикрыли. мучаюсь с VK ID.

Я создал приложение, получил ключи. Мне там сформировался код кнопки one Tap (рисунок 1)

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<div>
  <script nonce="csp_nonce" src="https://unpkg.com/@vkid/sdk@<3.0.0/dist-sdk/umd/index.js"></script>
  <script nonce="csp_nonce" type="text/javascript">
    if ('VKIDSDK' in window) {
      const VKID = window.VKIDSDK;
 
      VKID.Config.init({
        app: 54381923,
        redirectUrl: 'https://artemanu3171.xyz/eugeniy/social_login_callback/vk.php',
        responseMode: VKID.ConfigResponseMode.Callback,
        source: VKID.ConfigSource.LOWCODE,
        scope: '', // Заполните нужными доступами по необходимости
      });
 
      const oneTap = new VKID.OneTap();
 
      oneTap.render({
        container: document.currentScript.parentElement,
        showAlternativeLogin: true,
        oauthList: [
          'mail_ru',
          'ok_ru'
        ]
      })
      .on(VKID.WidgetEvents.ERROR, vkidOnError)
      .on(VKID.OneTapInternalEvents.LOGIN_SUCCESS, function (payload) {
        const code = payload.code;
        const deviceId = payload.device_id;
 
        VKID.Auth.exchangeCode(code, deviceId)
          .then(vkidOnSuccess)
          .catch(vkidOnError);
      });
    
      function vkidOnSuccess(data) {
        // Обработка полученного результата
      }
    
      function vkidOnError(error) {
        // Обработка ошибки
      }
    }
  </script>
</div>
Да, кнопка One Tap появилась на сайте (рис. 1). При ее нажатии меня перебрасывает вот сюда (рис. 2). Но здесь при нажатии Разрешить просто закрывается эта страница, и я остаюсь на своем сайте.

А как получить информацию о пользователе для обработки? Не парсить же мне ее на JavaScript с этой полосочки и не загонять на бекенд через какие-то формы...

При создании приложения vk указал путь к файлу: redirectUrl: 'https://artemanu3171.xyz/eugeniy/social_login_callback/vk.php'

Файл в этой папке создан. Думал, при авторизации он откроется, и там напишу обработку. Но нет.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.12.2025, 20:48
Ответы с готовыми решениями:

Горим! Нужна авторизация через PHP и второй вариант через Cookie
Использование сессий и cookie Ваш сайт состоит из 2-х php-страниц : 1. Страница авторизации....

После авторизации повторно перекидывает обратно на страницу авторизации
Так, у меня есть проблема. Как только авторизируюсь, перекидывает обратно на авторизацию. Вот...

Доступ к странице через авторизацию
Подскажите, или скиньте пож ссылку где можно почитать об этом(только где написано нормальным...

4
52 / 5 / 1
Регистрация: 11.09.2018
Сообщений: 318
05.12.2025, 20:50  [ТС]
Забыл прикрепить рисунки
Миниатюры
Авторизация через VK ID   Авторизация через VK ID  
0
52 / 5 / 1
Регистрация: 11.09.2018
Сообщений: 318
06.12.2025, 16:11  [ТС]
Ех... Придется костыли писать.

Добавлено через 2 часа 3 минуты
Ребята, я немного разобрался. Нашел на фронтенде в объекте data user_id и access_token. Передал их на бекенд и сформировал ссылку запроса к API VK.com.

PHP
1
2
3
4
5
$userId = $_POST['user_id'];
    $accessToken = $_POST['access_token'];
    $url = "https://api.vk.com/method/users.get?user_ids={$userId}&fields=first_name,last_name,status,online&access_token={$accessToken}&v=5.131";
 
    echo $url;
Если полученную ссылку копирую и открываю в новой вкладке браузера, то все отлично работает. Но если пытаюсь

PHP
1
2
3
4
5
6
$userId = $_POST['user_id'];
    $accessToken = $_POST['access_token'];
    $url = "https://api.vk.com/method/users.get?user_ids={$userId}&fields=first_name,last_name,status,online&access_token={$accessToken}&v=5.131";
 
    $response = file_get_contents($url);
    echo $response;
То возвращается

Code
1
{"error":{"error_code":5,"error_subcode":1130,"error_msg":"User authorization failed: access_token was given to another ip address","error_text":"Failed to connect to network. Please close the page and try again.","request_params":[{"key":"user_ids","value":"215691354"},{"key":"fields","value":"first_name,last_name,status,online"},{"key":"v","value":"5.131"},{"key":"method","value":"users.get"},{"key":"oauth","value":"1"}],"view":"alert"}}
Может, подскажете, ка это исправить?
0
0 / 0 / 0
Регистрация: 06.12.2025
Сообщений: 4
06.12.2025, 18:09
VK привязывает access_token к IP, поэтому в браузере по ссылке всё ок, а с file_get_contents() уже другой IP (сервера) - и прилетает ошибка.
Либо дергай users.get прямо с фронта этим токеном, либо делай нормальный server-side flow через VK ID / сервисный токен, а не тащи one-tap-токен на бэкенд.
0
52 / 5 / 1
Регистрация: 11.09.2018
Сообщений: 318
06.12.2025, 20:46  [ТС]
Можно подробнее. Как это сделать?

Добавлено через 1 час 50 минут
Попробовал на фронтенде вот так

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
let url = 'https://api.vk.com/method/users.get?user_ids='+ user_id +'&fields=first_name,last_name,status,online&access_token='+ access_token +'&v=5.131';
        
        let xhr = new XMLHttpRequest();
        xhr.open(
          'GET',
          url,
          true
        )
        xhr.send()
        
        xhr.onreadystatechange = function() {
          if (xhr.readyState != 4) {
            return
          }
        
          if (xhr.status === 200) {
            console.log('result', xhr.responseText)
            alert(xhr.responseText);
          } else {
            console.log('err', xhr.responseText)
          }
        }
Ошибка в консоли Access to XMLHttpRequest at 'https://api.vk.com/method/users.get?user_ids=215691354&fields=firs t_name,last_name,status,online&access_to ken=vk2.a.au7xeb_2JVVY2vc8Bo6Ts4_k61UA53 vq6MUURGPxucQe_OhzRpfSoC7t0JHy0D8YmKkds8 iQkFoTebhe3GoGyPXym_-bav379RU2A1n6nMmoKSxtX48yWad9vDZy76cSE1g Pah7jUbysk1sCgFV0hxsAhw8j2uk8A8e0ABRiGAs Zd1nbghuYiVOBhUqqXKkCKyg9JqiXPkkMdriVpVl QKNv3pCflG9Suj4eVAi7q0HWHRKqioFt34SliO1B mChuq&v=5.131' from origin 'https://artemanu3171.xyz' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Добавлено через 44 секунды
Ребята, кто-нибудь что-нибудь подскажет?

Добавлено через 13 минут
Так, кое что получилось. Нашел сервисный ключ авторизации. Вписал его вместо accessToken.

Один нюанс. Почему у меня фамилия и имя стали писаться на латинице транслитом? Ранее были на русском

Добавлено через 16 минут
Все. Решено.

Тьфу, Господи! Сам справился!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.12.2025, 20:46
Помогаю со студенческими работами здесь

Авторизация через cookies c выводом ошибок
Собственно нужно сделать маленький блок авторизации, который в последствии можно разместить в любом...

Как сделать авторизацию через Facebook?
Добрый день! Кто сталкивался с авторизацией через facebook - подскажите как это сделать....

Авторизация через PHP и jQuery
Есть форма авторизации на PHP и MySQL. Всё работает отлично. Но я решил приукрасить форму через...

Скрипт авторизации через ВКонтакте
Доброго времени суток! мне необходимо на сайте сделать авторизацию через виджет...

Авторизация через curl
Здравствуйте. Есть проблема, нужна помощь в ее решении. В общем нужно перейти по ссылке...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru