Вход на сайт через Вконтакте
Многие соцсети позволяют создавать приложения и через API получать данные пользователей, поэтому их использует для быстрой регистрации и авторизации на сайтах. Как проходит аутентификация, рассмотрим на примере VK:
- На сайте, пользователь нажимает на ссылку «Войти», открывается страница VK, где он разрешит приложению доступ к своим данным.
- После подтверждения браузер пользователя будет перенаправлен по адресу, указанному при открытии диалога авторизации. К URL добавляется GET-параметр с кодом авторизации.
- Скрипт выполняет ответный запрос с полученным кодом и ключом приложения для получения
access_token
. - Полученный в ответе
access_token
, скрипт использует для запроса к данным пользователя.
Регистрация приложения
Для начала нужно создать приложение на странице https://vk.com/editapp?act=create
В меню «Платформа» нужно указать – сайт, заполнить поля «адрес сайта» и «основной домен».
В настройках видим ID приложения и защищённый ключ, также нужно убедится что приложение включено и видно всем.
Ссылка для входа
Сформируем и выведем ссылку по которой пользователь даст разрешение на запрошенные действия.
$params = array(
'client_id' => 'ID приложения',
'redirect_uri' => 'https://example.com/oauth-vk.php',
'scope' => 'email',
'response_type' => 'code',
'state' => 'https://example.com/page-1'
);
$url = 'https://oauth.vk.com/authorize?' . urldecode(http_build_query($params));
echo '<a href="' . $url . '">Войти через ВКонтакте</a>';
В redirect_uri
указываем скрипт-обработчик, туда придет секретный код.
В параметре state
можно передать URL текущей страницы, чтобы вернуть пользователя обратно.
При переходе по ссылке откроется страница:
Получение данных
После того как пользователь дал разрешение, он возвращается на redirect_uri
, к URL добавляются GET-параметры:
https://example.com/oauth-vk.php?code=1234567890&state=https://example.com/page-1
redirect_uri
должен быть такой же как в ссылке для входа.
<?php
if (!empty($_GET['code'])) {
$params = array(
'client_id' => 'ID приложения',
'client_secret' => 'Защищённый ключ',
'redirect_uri' => 'https://example.com/oauth-vk.php',
'code' => $_GET['code']
);
// Получение access_token
$data = file_get_contents('https://oauth.vk.com/access_token?' . urldecode(http_build_query($params)));
$data = json_decode($data, true);
if (!empty($data['access_token'])) {
// Получили email
$email = $data['email'];
// Получим данные пользователя
$params = array(
'v' => '5.81',
'uids' => $data['user_id'],
'access_token' => $data['access_token'],
'fields' => 'photo_big',
);
$info = file_get_contents('https://api.vk.com/method/users.get?' . urldecode(http_build_query($params)));
$info = json_decode($info, true);
echo $email;
print_r($info);
}
}
Полученные данные пользователя
xxxx@xx.ru
array(
"response" => array(
0 => array(
"id" => 12345678,
"first_name" => "Иван",
"last_name" => "Иванов",
"photo_big" => "https://vk.com/images/camera_200.png?ava=1"
)
)
)
Далее все завит от реализации сайта, пользователя можно добавить в БД или обновить его данные и авторизовать в системе.
08.10.2019, обновлено 09.10.2021
Другие публикации
GitHub имеет свой API для авторизации по OAuth, что позволяет сделать авторизацию зарегистрированных там пользователей на своем сайте.
На страницах сайтов постоянно что-то добавляется, удаляется и обновляется, чтобы в поисковиках была только актуальная информация и нужные страницы не выпадали из поиска применяются редиректы.
Класс значительно упрощает работу с PDO, сокращает код. Реализован на статических классах и не требует создание экземпляра класса.
Аутентификация через ВКонтакте
С каждым днём влияние социальных сетей и сервисов только крепчает. Это означает, что нам, как веб разработчикам нужно это учитывать. Сегодня я расскажу и покажу, как создать аутентификацию ваших пользователей через социальную сеть ВКонтакте. Для этого мы не будем пользоваться какими-то сторонними библиотеками, а реализуем всё с нуля, собственными руками. Думаю, многие ждали подобного урока, так что томить не буду. Начнём!
Заметка.
Пример, созданный в данном уроке, предназначен для работы на локальном сервере.
Шаг 1. Регистрация нового приложения
Для начала нам необходимо создать новое приложение на сайте социальной сети ВКонтакте
В открывшейся форме введите название приложения; выберите тип “Веб-сайт”; В качестве адреса сайта введите путь к папке с проектом на вашем локальном сервере. В моём случае, это http://localhost/vk-auth
. Базовый домен: localhost
.
После нажатия на кнопку “Подключить сайт”, вам наверняка придётся ввести проверочный код, который придёт по смс. Если вы пройдёте проверку, то вам должна открыться следующая форма с настройками приложения.
Сразу же хочу предупредить, что настоящие данные, относящиеся к моему приложению, я заменил на фиктивные, т.к. публикация таких значений как “Защищённый ключ” карается удалением вашего приложения или учётной записи в целом.
Из данной формы нам понадобятся такие данные, как `ID приложения`, `Защищённый ключ`, `Адрес сайта`. Запишем их в специальные переменные в файле index.php:
<?php $client_id = '3485070'; // ID приложения $client_secret = 'lYjfUZwZmlJJlFIqQFAj'; // Защищённый ключ $redirect_uri = 'http://localhost/vk-auth'; // Адрес сайта
Шаг 2. Генерация ссылки для аутентификации
Для генерации ссылки нам потребуется адрес аутентификации и специальные параметры:
$url = 'http://oauth.vk.com/authorize'; $params = array( 'client_id' => $client_id, 'redirect_uri' => $redirect_uri, 'response_type' => 'code' );
С помощью функции http_build_query, передав туда массив параметров, получим чередование ключей и значений, как в url адресе. Итак, генерируем ссылку и выводим на экран:
echo $link = '<p><a href="' . $url . '?' . urldecode(http_build_query($params)) . '">Аутентификация через ВКонтакте</a></p>';
Также тут я воспользовался функцией urldecode. Если этого не сделать, то в сгенерированной ссылке могут появиться закодированные символы слешей, знаков двоеточия и так далее. Что-то вроде этого:
http://oauth.vk.com/authorize?client_id=3485070&redirect_uri=http%3A%2F%2Flocalhost%2Fvk-auth&response_type=code
Если же мы пропустим данную строку через функцию urldecode, то получим:
http://oauth.vk.com/authorize?client_id=3485070&redirect_uri=http://localhost/vk-auth&response_type=code
Итак, ссылка для аутентификации у нас готова. Если мы сформировали все параметры правильным образом и получили верный url, то пройдя по ссылке, будем перенаправлены по адресу, указанному в настройках приложения (‘http://localhost/vk-auth’). Только теперь к этому адресу будет прикреплён специальный параметр code:
// Пример. В вашем случае код будет другой http://localhost/vk-auth/?code=f30621b146115b3bad
Шаг 3. Получение токена
Начинать процедуру аутентификации мы можем тогда и только тогда, когда к нам пришёл параметр code. Он нам нужен для того, чтобы получить специальный токен доступа, с помощью которого, в дальнейшем, мы достанем информацию о пользователе.
В первую очередь, снова сформируем нужные нам параметры для этого запроса:
if (isset($_GET['code'])) { $params = array( 'client_id' =>if (isset($_GET['code'])) { $params = array( 'client_id' => $>clientId, 'client_secret' => $this->clientSecret, 'code' => $_GET['code'], 'redirect_uri' => $this->redirectUri ); }gt;clientId,
'client_secret' => $this->clientSecret,
'code' => $_GET['code'],
'redirect_uri' => $this->redirectUri
);
}Далее нам нужно отправить GET
запрос на адрес https://oauth.vk.com/access_token
, передав перечисленные параметры. В PHP выполнить GET запрос по какому-то адресу можно несколькими способами. Для данного урока я воспользуюсь функцией file_get_contents
.if (isset($_GET['code'])) { $params = array( '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); }{"access_token":"2c6276b767b5e2f35f908e89d61416beea17b6d1ebcd3d14e20ac910281d306bb506ec78e75518ed614e9","expires_in":86399,"user_id":14966712}Для того чтобы мы далее могли работать с данными параметрами, декодируем JSON строку с помощью функции json_decode
и помещаем данные в массив, передав в качестве второго аргумента true.Шаг 4. Получение информации о пользователе
if (isset($_GET['code'])) { $params = array( '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 = array( 'uids' => $token['user_id'], 'fields' => 'uid,first_name,last_name,screen_name,sex,bdate,photo_big', 'access_token' => $token['access_token'] ); } }if (isset($_GET['code'])) { $params = array( '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 = array( 'uids' => $token['user_id'], 'fields' => 'uid,first_name,last_name,screen_name,sex,bdate,photo_big', 'access_token' => $token['access_token'] ); $userInfo = json_decode(file_get_contents('https://api.vk.com/method/users.get' . '?' . urldecode(http_build_query($params))), true); } }В результате, если всё было сделано правильно, то получим JSON ответ следующего вида:
{"response":[{"uid":14966712,"first_name":"Стас","last_name":"Протасевич","screen_name":"stanislav.protasevich","sex":2,"bdate":"3.7.1988","photo_big":"http:\/\/cs307601.vk.me\/u14966712\/a_8234a279.jpg"}]}Снова преобразуем JSON ответ в массив и обратимся к нулевому элементу, хранящемуся в массиве, доступному по ключу response:
if (isset($_GET['code'])) { $result = false; $params = array( '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 = array( 'uids' => $token['user_id'], 'fields' => 'uid,first_name,last_name,screen_name,sex,bdate,photo_big', 'access_token' => $token['access_token'] ); $userInfo = json_decode(file_get_contents('https://api.vk.com/method/users.get' . '?' . urldecode(http_build_query($params))), true); if (isset($userInfo['response'][0]['uid'])) { $userInfo = $userInfo['response'][0]; $result = true; } } }Прошу обратить внимание, что в данном фрагменте, я добавил специальную переменную $result, равную изначально false сразу же после проверки наличия GET параметра code. Если нам удалось извлечь информацию о пользователе, то мы меняем значение этой переменной на true.
$client_id, 'redirect_uri' => $redirect_uri, 'тип_ответа' => 'код' ); echo $link = ' Аутентификация через ВКонтакте
'; если (isset($_GET['код'])) { $результат = ложь; $params = массив( 'client_id' => $client_id, 'client_secret' => $client_secret, 'код' => $_GET['код'], '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'] ); $userInfo = json_decode(file_get_contents('https://api.vk.com/method/users.get' . '?' . urldecode(http_build_query($params))), true); if (isset($userInfo['response'][0]['uid'])) { $userInfo = $userInfo['response'][0]; $результат = правда; } } если ($результат) { echo "Социальный идентификатор пользователя: " . $userInfo['uid'] . '
'; echo "Имя пользователя: " . $userInfo['first_name'] . '
'; echo "Ссылка на профиль пользователя: " . $userInfo['screen_name'] . '
'; echo "Пол пользователя: " . $userInfo['секс'] . '
'; echo "День Рождения: " . $userInfo['bdate'] . '
'; echo ''; эхо "
"; } } ?>Шаг 5. Извлечение информации о пользователе
если ($результат) { echo "Социальный идентификатор пользователя: " . $userInfo['uid'] . '
'; echo "Имя пользователя: " . $userInfo['first_name'] . '
'; echo "Ссылка на профиль пользователя: ". 'http://vk.com/' . $userInfo['screen_name'] . '
'; echo "Пол пользователя: " . $userInfo['секс'] . '
'; echo "День Рождения: " . $userInfo['bdate'] . '
'; echo ''; эхо "
"; }Шаг 6. Дело за вами
Теперь, когда у нас есть такая информация, как идентификатор пользователя, в первую очередь нам необходимо проверить его наличие в нашей базе данных. Если пользователя с таким идентификатором не существует, то это значит, что он авторизовался с нашего сайта впервые, и мы внесём его в базу. Если пользователь уже есть, можно проверить, не изменились ли какие-то данные о нем, например, имя или еще что-то. Если да, обновим запись.
После этого всё, что нам осталось сделать, так это создать сессию и поместить в неё информацию о нашем пользователе.
$_SESSION['user'] = $userInfo;На странице выхода из системы просто удаляем сессию с помощью функции
unset
.
Статьи
/ PHP
В предыдущая статья
мы уже сделали авторизацию на сайте через ВК, однако тогда не сохраняем пользователей и информацию о них. Сегодня же мы продолжим эту тему, занесём пользователей в ресурсы данных, выведем информацию о юзере на нескольких страницах сайта и рассмотрим вариант с использованием библиотеки SimpleVK.Шаг 1: Подключение приложения
Далее во вкладке «Настройки» нужно найти и куда-нибудь себе скопировать ID приложения и защищённый ключ:
Шаг 2: База данных
идентификатор
– идентификатор пользователя (число)vk_id
– ID страницы пользователя в ВК (число)имя_имя
– имя (строка)фамилия
– фамилия (строка)сэ
х
– пол (чисто)фото_200
– ссылка на аватарку (строка)время соединения
– дата регистрации юзера на нашем сайте (число)
Шаг 3: Написание кода
Архив с кодом, как и всегда, будет прикреплён к статье. Ну, а я для начала создаю необходимые для дальнейшей работы файлы:
init.php
(конфигурационный файл)profile.php
(профиль пользователя)папка logout
, внутри файл index.php
(для выхода из аккаунта)Также в папку с сайтом закидываю две библиотеки (для работы с БД и для работы с VK API), и в итоге получается как-то так:
Далее открываем файл init.php
, начинаем кодить. Сразу же подключаем библиотеки и делаем старт сессии, дабы в дальнейшем использовать суперглобальный массив $_SESSION. Чуть ниже создаём несколько констант для работы с БД, а также массив с инфой о нашем приложении (которое мы создали на 1 шаге):<?php /* Подключение библиотек */ require_once 'simplevk-master/autoload.php'; require_once 'vendor/autoload.php'; session_start(); // старт сессии /* Константы для работы с БД */ const SERVER = 'localhost'; const USERNAME = 'Имя пользователя'; const PASSWORD = 'Пароль'; const DATABASE_NAME = 'Имя БД'; const CHARSET = 'utf8mb4'; /* Массив с данными о нашем приложении в ВК */ const SETTINGS = array ( 'client_id' => '*******', // ID приложения 'client_secret' => '********************', // Защищённый ключ 'redirect_uri' => '****************' // Страница, на которую нас перебросит после авторизации );
Используя ранее созданные константы нужно:
а) подключиться к базе данных, используя статический метод create() класса Mysql;
б) создать экземпляр класса SiteAuth, чтобы записать массив SETTINGS в одноимённое свойство этого класса.
$db = \Krugozor\Database\Mysql::create( SERVER, USERNAME, PASSWORD )->setDatabaseName( DATABASE_NAME )->setCharset( CHARSET ); // Подключение к БД $auth = new \DigitalStar\vk_api\SiteAuth( SETTINGS ); // Создаём экземпляр класса SiteAuth
Далее будет срабатывать проверка на авторизацию пользователя. Если результат положителен – значит нужно вытащить из БД данные юзера:
if ( $_SESSION['user_id'] ) // Проверяем, есть в массиве $_SESSION айди юзера { $row = $db->query( "SELECT * FROM users WHERE `vk_id` = ?i LIMIT 1", $_SESSION['user_id'] )->fetchAssoc(); // Вытаскиваем из БД инфу о юзере $login = $row['first_name'] . ' ' . $row['last_name']; // Конкотенируем имя и фамилию пользователя для удобства, записываем результат в переменную $login } else { $login = ''; // Если пользователь не авторизован, то логин будет равен пустой строке }
На этом написание кода в файле init.php
окончено.Переходим к оформлению файла index.php
(главной страницы сайта). Надолго застревать тут не будем, ведь в этом файле будет в основном html-разметка и пара стилей для красоты:<?php require 'init.php' // Подключение файла init.php ?> <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Главная</title> <style> body {display: flex;flex-direction: column;justify-content: space-between;height: 900px;margin: 0} header {display: flex;justify-content: space-around;align-items: center;background-color: #f0f3ff} footer {background-color: #f0f3ff;text-align: center} .site-name {font-size: 36px;font-weight: 700;} .login-btn {display: block;cursor: pointer;width: 200px;height: 60px;line-height: 60px;border: none;border-radius: 30px;background-color: #73cf96;text-align: center;color: #fff} </style> </head> <body> <header> <h2 class="site-name"><a href="/">Название сайта</a></h2> <?php if ( $_SESSION['user_id'] ): // Проверка на авторизацию ?> <a href="profile.php" class="login-btn"><?= $login // Распечатываем логин, если юзер авторизован ?></a> <?php else: ?> <a href="<?= $auth->get_link() // Распечатываем ссылку на авторизацию, есди юзер не авторизован ?>" class="login-btn">Авторизация</a> <?php endif ?> </header> <main></main> <footer> <span>Футер</span> </footer> </body> </html>
Следующий на очереди файл profile.php
(пользовательский профиль). H TML-разметка здесь будет такой же, как и на главной, однако в самом верху тут нужно добавить кое-какой php-код.Начинаю с подключения init.php
и проверки на авторизацию:<?php require 'init.php'; if ( !$_SESSION['user_id'] ) // Проверка на авторизацию { // Тут будем писать код } ?>
Если пользователь не авторизован, то, соответственно, необходимо его авторизовать. Ранее мы создали экземпляр класса SiteAuth в переменной $auth, поэтому теперь можем использовать метод auth() для начала процесса авторизации юзера:
<?php require 'init.php'; if ( !$_SESSION['user_id'] ) // Проверка на авторизацию { $auth->auth(); } ?>
Теперь, если посмотреть, что находится в переменной $auth, то увидим следующее:
Внутри этой непонятной штуки можно наблюдать так называемый Access Token, без наличия которого получить какую бы то ни было информацию о человеке из ВК (имя, фамилию, аватарку и т.д.) не получится. Но у нас он теперь есть, поэтому подтянуть данные с ВК не составит труда. Кстати, токен можно сохранить в БД, чтобы его можно было юзать в будущем. Но я сейчас это делать не буду, потому как токен использую всего единожды:
<?php require 'init.php'; // Подключение init.php if ( !$_SESSION['user_id'] ) // Проверка на авторизацию { $auth->auth(); // Запуск процесса авторизации $vk = \DigitalStar\vk_api\vk_api::create( $auth->data['access_token'], '5.131' ); // Авторизируемся через токен пользователя. Вторым параметром метода create указывается вермия VK API $user_info = $vk->userInfo( $auth->data['user_id'], $scope = [ 'fields' => 'id, first_name, last_name, sex, photo_200' ] ); // Вытягиваем с ВК нужную нам инфу $_SESSION['user_id'] = $user_info['id']; // Записываем в массив $_SESSION айдишник юзера } ?>
Теперь надо бы выяснить, зарегистрирован ли пользователь на нашем сайте. Если да, то заново регать его не нужно, достаточно просто дать ему возможность захода в аккаунт:
<?php require 'init.php'; // Подключение init.php if ( !$_SESSION['user_id'] ) // Проверка на авторизацию { $auth->auth(); // Запуск процесса авторизации $vk = \DigitalStar\vk_api\vk_api::create( $auth->data['access_token'], '5.131' ); // Авторизируемся через токен пользователя. Вторым параметром метода create указывается вермия VK API $user_info = $vk->userInfo( $auth->data['user_id'], $scope = [ 'fields' => 'id, first_name, last_name, sex, photo_200' ] ); // Вытягиваем с ВК нужную нам инфу $_SESSION['user_id'] = $user_info['id']; // Записываем в массив $_SESSION айдишник юзера $result = $db->query( "SELECT * FROM `users` WHERE `vk_id` = ?i", $user_info['id'] )->fetchAssoc(); // Поиск в БД по vk_id if ( isset( $result['id'] ) and $result['id'] ) // Если пользователь есть в базе, то обновляем его данные $db->query( "UPDATE `users` SET `first_name` = '?s', `last_name` = '?s', `sex` = ?i, `photo_200` = '?s' WHERE `vk_id` = ?i", $user_info['first_name'], $user_info['last_name'], $user_info['sex'], $user_info['photo_200'], $user_info['id'] ); else // Если в базе пользователя не оказалось, то добавляем его $db->query( "INSERT INTO `users` SET `vk_id` = ?i, `first_name` = '?s', `last_name` = '?s', `sex` = ?i, `photo_200` = '?s', `join_time` = ?i", $user_info['id'], $user_info['first_name'], $user_info['last_name'], $user_info['sex'], $user_info['photo_200'], time() ); } ?>
Ниже добавляем HTML-код (по сути такой же, как и на главной):
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Профиль</title> <style> body {display: flex;flex-direction: column;justify-content: space-between;height: 900px;margin: 0} header {display: flex;justify-content: space-around;align-items: center;background-color: #f0f3ff} footer {background-color: #f0f3ff;text-align: center} .site-name {font-size: 36px;font-weight: 700;} .login-btn {display: block;cursor: pointer;width: 200px;height: 60px;line-height: 60px;border: none;border-radius: 30px;background-color: #73cf96;text-align: center;color: #fff} main > p > span {font-weight: 500} </style> </head> <body> <?php require 'init.php' ?> <header> <h2 class="site-name"><a href="/">Название сайта</a></h2> <?php if ( $_SESSION['user_id'] ): // Проверка на авторизацию ?> <a href="profile.php" class="login-btn"><?= $login // Распечатка логина ?></a> <?php else: ?> <?= '<html><head><script language="jаvascript">top.location.href="' . $auth->get_link() . '";</script></head></html>' // Ссылка на регу ?> <?php endif ?> </header> <main> <!-- Тут выведем данные пользователя --> </main> <footer> <span>Футер</span> </footer> </body> </html>
Внутри тега <main> распечатаю все имеющиеся данные о пользователе:
<main> <?php if ( $_SESSION['user_id'] ): // Проверка на авторизацию ?> <p><img src="<?= $row['photo_200'] // Аватарка ?>" alt=":("></p> <p>Имя и фамилия: <span><?= $login // Имя и фамилия (логин) ?></span></p> <p>Пол: <span><?php if ( $row['sex'] == 1 /* Пол 1 -Ж */ ) print 'Женщина'; elseif ( $row['sex'] == 2 /* Пол 2 - М*/ ) print 'Мужчина'; else /* Пол 0 - неизв. */ print 'Не указан' ?></span></p> <p>Дата регистрации на сайте: <span><?= date( 'd.m.Y', $row['join_time'] ) ?></span></p> <a href="/logout">Выйти</a> <?php else: ?> <p>Вы не авторизованы</p> <?php endif ?> </main>
Смотрим, что получилось:
Как видите – всё работает. И это хорошо 🙂
Для этого понадобится файл index.php
, который в начале мы создали в папке logout
:
Открываем его, пишем следующий код:
<?php session_start(); // Старт сессии $_SESSION['user_id'] = 0; // Удаляем из массива $_SESSION айди пользователя print "<html><head><script language=\"jаvascript\">top.location.href=\"/\";</script></head></html>"; // Переключаем человека на главную страницу сайта
Всё! Ссылка на архив с файлами тестового сайта и дампом БД ниже:
Только в России Pornhub требует от своих пользователей авторизацию через «ВКонтакте» для подтверждения их возраста, что заставляет сомневаться в том, насколько безопасно компания обращается с личными данными. Для тех, кто хочет продолжать заходить на Pornhub анонимно, есть несколько довольно простых способа обойти авторизацию. Подходящий найдётся и для тех, кто пользуется сайтом редко, и для тех, кто без любимых видео и дня прожить не может.
Днём 11 декабря аналитики Pornhub опубликовали итоги года, где расписали сколько времени среднестатистический житель каждый страны смотрит порновидео, какие порнозвёзды ему нравятся, какой жанр видео для взрослых он предпочитает и многое другое. Россиян компания вниманием тоже не обошла.
Итоги были настолько детальными, что мы в Medialeaks задались вопросом, а действительно ли весь этот объём данных, которые Pornhub о вас собирает, хорошо защищён. Для этого мы попытались разобраться, в каких отношениях Pornhub находится с Роскомнадзором, который до сих пор не заблокировал сайт, и со «ВКонтакте». Учитывая, что только в России Pornhub просит своих пользователей авторизовываться через соцсеть, сливающую информацию силовикам, причины опасаться за свою личную информацию есть.
Однако это не значит, что от просмотра видео на Pornhub стоит отказываться совсем. Существуют несколько разных способов обойти авторизацию на сайте через «ВКонтакте», чтобы избежать возможной утечки своих личных данных. О некоторых из них нам рассказали наши подписчики, некоторые мы нашли сами, и удобный способ найдётся для каждого.
VPN
Один из самых простых способов не авторизовываться через «ВКонтакте» — воспользоваться VPN. Тогда весь ваш трафик в зашифрованном виде будет проходить через сервер, адрес которого может принадлежать другой стране, а значит — ни сайты, ни провайдер не увидят, откуда именно вы заходите в интернет.
Казалось бы, логичнее всего для входа на Pornhub воспользоваться VPN-сервисом, запущенным самим сайтом для взрослых. В мае этого года компания выпустила VPNhub
, но бесплатно он работает только на мобильных устройствах. На десктопе за возможность неограниченно сёрфить и при этом оставаться анонимным придётся выложить кругленькую сумму.Но и кроме VPNhub существует немало VPN-сервисов, как встроенных в браузеры, так и самостоятельных, и при этом бесплатных. Их минус в том, что выбрать из них самый подходящий не всегда так уж легко, особенно учитывая то, что создатели большинства из них всеми способами стараются заставить вас купить платную версию их программы. Для этого сервисы могут ограничивать трафик, замедлять скорость соединения, ограничивать количество стран, откуда вы якобы выходите в интернет.
Поэтому, скорее всего, вам придётся включать VPN, когда заходите на Pornhub, и выключать его сразу после этого. Да, всего пара кликов, но если вам лень делать и это, есть другое решение.
Прокси
Серверы прокси действуют по похожему принципу, что и VPN: ваш трафик перенаправляется через них, таким образом скрывая ваше местоположение, но при этом данные, чаще всего, не шифруются. В данном случае вам не нужно устанавливать отдельную программу или расширение, которое нужно включать или выключать. Достаточно лишь вбить адрес бесплатного прокси-сервера в настройки вашего браузера.
Именно по такой схеме работает прокси от российского проекта «Антизапрет».
С помощью созданного им сервиса проксируются все сайты из чёрного списка Роскомнадзора, чтобы скорость интернет-соединения на других веб-страницах оставалась прежней.Легче всего настроить прокси «Антизапрета» в Firefox. В меню основных настроек Firefox вам нужно будет найти кнопку «Настроить» в разделе «Параметры сети». В открывшемся меню нужно выбрать «URL автоматической настройки прокси» и вставить туда ссылку — https://antizapret.prostovpn.org/proxy.pac
.Чуть сложнее — в Chrome и Opera. Сначала нужно открыть дополнительные настройки, потом — кликнуть по меню настроек прокси-сервера в меню «Система». Вам откроется всплывающее окно, в котором надо выбрать «Автонастройка прокси» и вставить всё ту же ссылку. Такое же окно открывается и в Safari, если зайти в меню «Дополнения» в настройках и выбрать «Настройки прокси».
Прокси от «Антизапрета» можно установить и на телефон. В iPhone для этого нужно зайти в настройки Wi-Fi, нажать «i» напротив названия сети, в меню «Настройка прокси» выбрать «автоматическая, и вставить всё ту же ссылку. На Android схема действий аналогична.
Хотя «Антизапрет» на своём сайте и пишет, что работа его прокси стабильна, серверы могут устареть или стать заблокированными, а ещё — довольно сильно влиять на скорость соединения. Но есть способ избежать и этого.
Изменение кода страницы
Авторизация через ВК зашита в код страницы, и удалить её — дело нескольких секунд. Разберём на примере браузера Mozilla Firefox для Mac. Всё, что вам нужно сделать, это нажать на странице правой кнопкой мыши и выбрать из открывшегося контекстного меню пункт «Исследовать элемент». Тогда вам откроется страшное зрелище.
Но не пугайтесь. Нас интересуют лишь две строчки:
Ищем их в коде, кликаем на каждую двойным щелчком мыши, нажимаем Delete, и готово. Если не хочется каждый раз лазить в коде, хотя это и заменяет секунды, можно переложить эту обязанность на программу.
Adblock
В настройках фильтров программы нужно выбрать вкладку «Собственные фильтры» и кликнуть «Добавить группу фильтров». Внутри неё нужно добавить два фильтра:
Теперь вы и и навязчивой рекламы не увидите, и Pornhub сможете посмотреть. Только не увлекайтесь, особенно если смотрите порно не дома. Парень из Штатов был так неосторожен, что провалил целое ограбление из-за пристрастия к видео для взрослых. Зато урок всем остальным преступникам.
Но бывает и так, что любовь к порно подводит самих полицейских, и они упускают заключённых прямо у себя из-под носа.
Возможно, они смотрели даже не откровенные видео, а самый милый контент на Pornhub. Даже ваша мама, увидев бы такие ролики
, порадовалась.
Статьи
/ 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 ];
ВК возвращает нам токен пользователя, его можно сохранить в базу данных.
Разрешаем и у нас на сайте появляются данные об аккаунте:
Авторизация работает. Далее можете сохранить 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'];