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

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

05.12.2025, 20:48. Показов 1126. Ответов 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
Сообщений: 324
05.12.2025, 20:50  [ТС]
Забыл прикрепить рисунки
Миниатюры
Авторизация через VK ID   Авторизация через VK ID  
0
52 / 5 / 1
Регистрация: 11.09.2018
Сообщений: 324
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
Сообщений: 324
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
Ответ Создать тему
Новые блоги и статьи
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов, содержащихся в реализации модуля. По-умолчанию все члены модуля доступны: module Foo let x = 10 let boo () = printfn "boo" . . .
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции. <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible". . .
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru