oAuth авторизация на сайте через ВК - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Sanoxxx, Alowir  
Форум » Программирование » PHP Програмированние » oAuth авторизация на сайте через ВК (Всё по полочкам)
oAuth авторизация на сайте через ВК
Radiance Дата: Понедельник, 20.04.2015, 12:14 | Сообщение # 1
Боец
Сообщений: 209
Статус: Offline
Вспомнилось, как то натыкался в гугле на тему с какого то игрового форума (то ли по вовке, то ли по пв), где человек 30 общими усилиями пытались разобраться в том, как прикрутить oAuth-авторизацию через ВК к своим сайтам. Улыбнуло.
Тут я такого материала не наблюдал, так что объясню.

oAuth-авторизация помогает нам быстро и безболезненно регистрировать \ авторизовывать юзеров у нас на сайте, без лишних заморочек как для нас, так и для них. Тыкнул кнопочку - и всё. И никакого геморроя. Замечательно же? Я думаю, да.
Красота-удобство же.

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

Приступим.

Первый шаг - нужно завести приложение ВК.

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

Тут нас просят выбрать тип приложения. Насколько помню, есть варианты: standalone-приложение, веб-сайт, и еще что то.

Выбираем вариант веб-сайт

---------------------------------


Второй шаг - настройка приложение и начало кода.


Как только мы подтвердили, что мы не верблюд, перед нами открывается страничка настройки приложения:


Идём в подпункт меню настройки

Там нам нужно подсмотреть ID приложения:



Итак, теперь идем к нашему коду.

В <head> шаблона сайта кладём следующее:

Код

<script type="text/javascript" src="http://userapi.com/js/api/openapi.js?34">
// Инициализация прилки
VK.init({apiId: ID нашего приложение, которое мы только что запилили});
</script>


В том месте, где по замыслу неавторизованному юзеру должна выводиться кнопка "Войти через ВКонтакте" кладём вот это

Код

<p>Для доступа к сервисам сайта необходимо авторизоваться</p>

<div id="vk_auth"></div>
         <script type="text/javascript">
         VK.Widgets.Auth("vk_auth", {width: "300px", authUrl: \'vklogin.php?\'});
         </script>
</div>


Сохраним, обновим страничку, и, вуаля:


Тут больше ничего делать не надо.

Идём далее.

---------------------------------


Шаг третий - примитивный обработчик


Теперь при нажатии на кнопку "Войти через ВКонтакте" пользователю будет выкидывать стандартное диалоговое окно oAuth авторизации ВК, с запросом на разрешение доступа.

Если ты, мой юный друг, внимательно читал и смотрел всё, что я написал, то должен был заметить, что в коде кнопочки есть адрес - vklogin.php
Это имя скрипта, который будет обрабатывать нашу авторизацию.

После всех манипуляций пользователя перекинет именно туда.
Данные прийдут с GET-запросом, и будут иметь вид:
Код

Array ( [uid] => Ид в ВК    
[first_name] => Имя    
[last_name] => Фамилия    
[photo] => ссылка на аватар большой    
[photo_rec] => ссылка на аватар маленький    
[hash] => уникальный хеш )
    


Оперируя этими данными уже делаем проверки - есть ли юзер с таким вк идом в базе, или нет. Если нет - добавляем и авторизуем. Если есть - просто авторизуем.
Свобода действий.

Хеш проверяется следующим образом:

Код

$appID = "ID приложения";
$uid = "ID юзера VK";
$secret = "Секретный ключ приложения";

$ourhash = md5($appID.$uid.$secret); // Выведет правильный хеш, который должен был прийти вместе с юзером. Всё, что не совпадает с этим хешем - ложь



Радик камбек :D

Radiance Дата: Понедельник, 20.04.2015, 14:49 | Сообщение # 2
Боец
Сообщений: 209
Статус: Offline
Пример скрипта vklogin.php

Структура БД -
| vkid (int) | |

Код

<?php
session_start();

if (empty($_GET['hash'])){
die("Т хацкр7");
}
// драйвер работы с базой PDO DB
// будем считать, что подключаем скрипт-коннектер
require_once 'db.php'
// для удобства вынесу в отдельную переменную
$id = $_GET['uid'];
// запросим из базы всё из строки, где вкид равен пришедшему
$getUsr = $db->prepare("SELECT * FROM `users` WHERE `vkid` = :vkid");
$getUsr -> bindParam(":vkid", $id, PDO::PARAM_INT);
$getUsr->execute();
// если затронуто больше нуля строк
if ($getUsr->rowCount()){
// тут что надо проворачиваете, просто провессим сессию
$_SESSION['id'] = $id;
}else{

// если вернулся 0, значит юзера нет. Так что запишем
$insUsr = $db->prepare("INSERT INTO `users`(`vkid`) VALUES (?)");
$data = array($id);
$insUsr->execute($data);

// опять творим свои манипуляции
$_SESSION['id'] = $id;

}

$db= null;
?>


У обработчика сложного нет ровным счетом нифига.

Сразу говорю - данный пример не использовать, т.к. он подвержен лёгкому обходу авторизации мимо VK API, и подставив любой ID хацкир авторизуется под любым аккаунтом.
Так что добавляйте соли, сверяйте хеши и т.д.



Радик камбек :D

Radiance Дата: Пятница, 01.05.2015, 15:04 | Сообщение # 3
Боец
Сообщений: 209
Статус: Offline
Wеezy, на любом.
Если cms-ки юзаются, то проще готовые плагины поискать, либо глянуть, как генерятся хеши, соли и тэдэ



Радик камбек :D

vasiliy-jopin Дата: Суббота, 18.07.2015, 09:54 | Сообщение # 4
Боец
Сообщений: 74
Статус: Offline
Нормально так. biggrin
Молодец.
Junya Дата: Воскресенье, 26.07.2015, 15:20 | Сообщение # 5
Боец
Сообщений: 120
Статус: Offline
Полезная темка. Сразу видно продвинутый пользователь по значку Amigo в Панели Задач biggrin
Radiance Дата: Понедельник, 27.07.2015, 06:19 | Сообщение # 6
Боец
Сообщений: 209
Статус: Offline
Junya, при том установлен он в полном сознании.


Радик камбек :D

anugley Дата: Среда, 19.08.2015, 17:39 | Сообщение # 7
CHEATER CM
Сообщений: 221
Статус: Offline
Спасибо, урок очень кстати :)
Форум » Программирование » PHP Програмированние » oAuth авторизация на сайте через ВК (Всё по полочкам)
  • Страница 1 из 1
  • 1
Поиск:
Статистика Форума
Лучшие пользователи
Admin [39113]

GеNius [7209]

[CM]Russel [5557]

kenlo763 [4952]

[CM]AGRESSOR [4639]

Snake_Firm [4452]

Сэс [4416]

Artem_Buero [4223]

[CM]Durman [3204]

[CM]Рафаэль [3080]

iMaddy [2855]

sky_Woker [2854]

getrekt [2745]

Новые пользователи
rubenia18 [21:17]

pokotiloroman91 [18:24]

stephensh5 [12:00]

calliesv7 [06:11]

louqm16 [22:14]

artushak [16:32]

Kingpolker [15:42]

leeyv11 [15:12]

Trappa17 [01:00]

Djamalchik [16:40]

ajeense [14:24]

654470559 [08:55]

Newtone [03:01]