Многие соцсети позволяют создавать приложения и через 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
Далее запрашивается access_token
(в ответе с токеном будет e-mail). После этого выполняется метод users.get
, который возвращает ID, имя, фамилию и URL аватарки.
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"
)
)
)
Далее все завит от реализации сайта, пользователя можно добавить в БД или обновить его данные и авторизовать в системе.