OAuth авторизация через ВКонтакте –

Авторизация через вконтакте api.

OAuth авторизация через ВКонтакте -

Авторизация через вконтакте, и другие — 3 (вконтакте и oauth)

В

прошлыхдвух

частях мы сделали авторизацию через ВКонтакте, используя предоставленный ими javascript-виджет и через Майл.ру, используя как JS API, так и через взаимодействие сервер-сервер. Сегодня мы исправим наше упущение относительно ВКонтакте и рассмотрим авторизацию через ВКонтакте без использования клиентских javascript’ов.

В качестве ссылки на авторизацию мы можем использовать любой элемент, например картинку

OAuth авторизация через ВКонтакте -

, оформленную аналогичным образом со ссылкой на авторизацию через mail.ru.

Ссылка у нас будет следующего вида:

api.vkontakte.ru/oauth/authorize?client_id=2445355&scope=&redirect_uri=_REDIRECT_URI_&response_type=code

Механизм работы с Контактом следующий: пользователь переходит по ссылке, передавая Контакту номер нашего приложения,

параметры доступа

, которые хочет получить наше приложение в параметре scope, URI для перенаправления, как в случае согласия пользователя, так и в случае отказа его предоставить доступ нашему приложению. Параметр response_type=code обязателен в случае с авторизацией через OAuth. Мы хотим получить лишь базовые данные о пользователе и пока не хотим постить на его стену и слать ему сообщения, поэтому параметр scope у нас пустой.

OAuth авторизация через ВКонтакте -

После того как пользователь разрешит нам доступ, его перенаправит на страницу, указанную в параметре redirect_uri в следующем виде:

_http://REDIRECT_URI?code=7a6fa4dff77a228eeda56603b8f

Хотя в документации указан такой пример (с добавлением http://) перед переданным значением, как показывает практика, можно безопасно передавать полные адреса, адрес протокола добавляется только тогда, когда это нужно.

В случае, если пользователь нам откажет (об этом тоже важно помнить), то будет перенаправлен на страницу _http://REDIRECT_URI?error=access_denied&error_reason=user_denied&error_description=User denied your request

Пришедший с ответом параметр code используется для получения ключа доступа (access_token), с помощью которого мы собственно и будем забирать данные о пользователе. Для того чтобы использовать полученный code у нас ровно час.

Для получения access_token можно использовать вот такой код:

$url = "https://api.vkontakte.ru/oauth/access_token?client_id=_APP_ID_&client_secret=_CLIENT_SECRET_&code=" . $_REQUEST['code'];
$response = json_decode(@file_get_contents($url));
if ($response->error) {
die('Или какая-то другая обработка ошибки');
}

В данном примере _APP_ID_ — номер вашего приложения, а _CLIENT_SECRET_ — секретный ключ, получаем на странице настройки параметров приложения.

В $response->access_token мы получим так необходимый нам ключ доступа, а $response->user_id — номер пользователя в ВКонтакте. В случае каких-либо ошибок $response->error будет не пустым и в $response->error_description будет краткое описание ошибки.

Выполнять запросы к API можно получая как XML ответы, так JSON, получая содержимое страницы

api.vkontakte.ru/method/METHOD_NAME.xml?PARAMETERS&access_token=ACCESS_TOKEN

для первого случая и

api.vkontakte.ru/method/METHOD_NAME?PARAMETERS&access_token=ACCESS_TOKEN

для второго. Для себя я выбрал JSON раз уж взаимодействие с этой социальной сетью им и начинается.

Посмотреть

полный список методов API

можно на вики-страничке в разделе для разработчиков, их достаточно много, однако нам понадобится лишь getProfiles, возвращающий расширенную информацию о профилях одного или нескольких пользователей.

$arrResponse = json_decode(@file_get_contents("https://api.vkontakte.ru/method/getProfiles?uid={$response->user_id}&access_token={$response->access_token}&fields=photo"))->response;

В массиве $arrResponse мы имеем массив объектов «пользователь», что именно нам будет предоставлено мы указываем в параметре fields (допустимые параметры uid, first_name, last_name, nickname, screen_name, sex, bdate (birthdate), city, country, timezone, photo, photo_medium, photo_big, has_mobile, rate, contacts, education, online, однако некоторые, например uid и first_name приходят и без явного указания). Кроме этого

нам доступна гениальная вещь

— мы можем указать падеж склонения имени. Этой полезнейшей вещью можно пользоваться на своем сайте, выполняя поиск по имени и получая от Контакта имена в нужном склонении.

Единственное, что нам понадобится из ответа: $response[0]->uid, $response[0]->photo (для аватарки), $response[0]->first_name и $response[0]->last_name, из которых мы склеим отображаемое имя пользователя.

Дальнейший список действий аналогичен

первой моей статье

: проверяем, есть ли у нас такой пользователь, если есть — обновляем аватарку и имя пользователя, если нет — создаем запись в базе, авторизуем на сайте и переадресовываем на главную страницу.

Важно:

Также очень важное значение v, без него вообще не чего работать не будит, он указывает версию API.

Как быть?

Токен, полученный на клиентом, мы не можем использовать на сервере, и соответственно не можем запросить информацию о пользователе со стороны сервера, но мы можем проверить токен на валидность и узнать ид пользователя которому принадлежит данный токен.

С документации мы можем узнать что Параметр sig равен md5 от конкатенации следующих строк:

Давайте получим информацию о пользователе через open api, передадим её на сервер, проверим токен, и если все ок запишем в базу:

Настройка ссылки для входа

Первым делом сформируем ссылку используя которую пользователь нашего сайта сможет дать необходимые разрешения, на запрошенные нашим сайтом действия, например доступ к контактам.

Получение данных из вконтакте


И так, пропишем скрипт получения данных от vk по только что присланному code. 

Проблема 1

Полученный токен(sig) привязывается к ip-адресу, и при попытке использовать его на сервере вам выдаст ошибку:

Проблема 2

При таком способе авторизации нет возможности получить email пользователя, даже если вы запросите нужные права и пользователь даст согласие — вы не получите email в ответе.

Проверка авторизации


Давайте создадим модель, которая будет содержать информацию о пользователе:

Регистрация приложения

В первую очередь создайте приложение на странице 

Вывод:

В этой статье мы разобрали как делается авторизация во ВКонтакте на языке программирования PHP, также, если вам что то не понятно, то посмотрите эти две раздела из документации ВК.

Похожее:  СОЗДАНИЕ ЛИЧНОГО КАБИНЕТА ДЛЯ ЖИТЕЛЕЙ ЛЕНИНГРАДСКОЙ ОБЛАСТИ ЛОМОНОСОВСКОГО РАЙОНА ДЛЯ ДОСТУПА К УСЛУГАМ ПСК И ИНСТРУКЦИЯ ПО НАСТРОЙКЕ ИНДИВИДУАЛЬНОГО КАБИНЕТА НА САЙТЕ ПЭК

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *