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

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

05.12.2025, 20:48. Показов 503. Ответов 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
Сообщений: 317
05.12.2025, 20:50  [ТС]
Забыл прикрепить рисунки
Миниатюры
Авторизация через VK ID   Авторизация через VK ID  
0
52 / 5 / 1
Регистрация: 11.09.2018
Сообщений: 317
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
Сообщений: 317
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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru