Как сделать авторизацию на сайте через Вконтакте

Для одного проекта понадобилось сделать

Задачи социальной интеграции

Сейчас большинство пользователей интернета имеют аккаунты в социальных сетях (одноклассники, фэйсбук, вконтаке и другие). Эти социальные сети предоставляют свой api для авторизации на сторонних сайтах. Получается очень удобно имея один аккаунт в социальной сети, им же подписываться на других ресурсах и постить понравившийся контент. Привязка вашего сайта к социальным сетям сделает его более ‘дружелюбным’ к пользователям, избавит их от утомительной процедуры регистрации и подтверждения E-Mail.

Под api (application programming interface) следует понимать набор команд (запросов, методов) и формат ответов, предоставляемых соц. сетью разработчикам и описанных в документации.

Авторизация через социальные сети

Существует несколько способов авторизации через социальные сети.

С использованием api сторонних разработчиков

Можно использовать виджеты сторонних разработчиков, например uLogin или другие.

PHP — 100% Защищённая Регистрация и Авторизация за 30 минут. От профи.

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

    Преимущества такого подхода:
  • Широкий выбор социальных сетей для авторизации. Нет необходимости собственноручно регистрировать и настраивать ваше приложение в социальной сети, можно даже не заводить собственный аккаунт
  • Формат ответа при авторизации будет содержать набор стандартных заголовков полей, нет необходимости кастомизировать скрипт авторизации для каждой социальной сети. Вам не придется изучать документацию по методами работы с api
    Недостатками будут:
  • Проблемы с api сторонних разработчиков, как недоступность их серверов, изменение формата ответа, обязательно скажутся на работе скрипта авторизации на вашем сайте и на ваших пользователях.
  • api самих социальных сетей дают возможность получить гораздо больше информации о пользователях, чем позволяют сторонние разработки
  • Нет гарантии что информация пользователей будет передаваться только вам и не будет использована разработчиками в своих интересах. Нет гарантии что вам дадут достоверную информацию о пользователях.
  • Для передачи данных в совокупности потребуется выполнить большее количество запросов, что скажется на времени работы скрипта.
Еще по теме:  Когда Вконтакте будут удалять фейков

С использование api социальных сетей

  • При регистрации вашего приложения на Одноклассниках, Фэйсбуке, ВКонтакте ему будет назначен client_id приложения и специальные ключи доступа client_secret. В настройках необходимо указать redirect_uri — адрес страницы, которая будет обрабатывать code подтверждения.
  • На любой странице вашего сайта вы размещаете ссылку с client_id, как в документации на api. При клике на ссылку, api соответствующей социальной сети загрузит виджет (окно) на javascript с предложением к пользователю авторизоваться и разрешить доступ вашему приложению к его профилю. Важно, что вводимые логин и пароль не передаются вашему приложению, они будут переданы к соц. сети. Сам client_id приложения, как и ссылка авторизации, не являются секретными.
  • После того как пользователь введет логин и пароль и разрешит авторизацию, на страницу, которую вы указали в настройках своего приложения в параметре redirect_uri, api социальной сети выполнит запрос с параметром code методом GET. Этот параметр обрабатывается и служит вашему приложению сигналом для начала авторизации и получения access_token
  • Далее, в целях безопасности, ваше приложение должно выполнить запрос на получение access_token с использованием специального ключа доступа client_secret и кода подтверждения code полученного на предыдущем шаге. client_secret должен храниться в секрете и быть известен только вам. Ответ вернется в формате json, легко парсится на php, позволяет определить возникшие на этом этапе ошибки
  • Если процесс получения access_token прошел успешно, используя его вы можете совершать запросы к методам api социальной сети для получения данных пользователя. Ответ также возвращается в формате json, содержит данные или коды ошибок.
socialConf

Настройки приложения сохраним в ассоциативном массиве $socialConf следующего вида:

АВТОРИЗАЦИЯ В АККАУНТЕ VK ЧЕРЕЗ PYTHON

Еще по теме:  Как удалить фотки в ВК из альбома

$socialConf[‘client_id’] = YOUR_CLIENT_ID;
$socialConf[‘application_key’] = YOUR_APPLICATION_KEY;
$socialConf[‘client_secret’] = YOUR_CLIENT_SECRET;
$socialConf[‘redirect_uri’] = YOUR_REDIRECT_URI;

Далее $usrArr — ассоциативный массив данных пользователя.

Авторизация через odnoklassniki
  • Переходим по ссылке https://apiok.ru/dev/app/create и регистрируем свое приложение (заполняем форму), получаем client_id приложения и ключи доступа.
  • Размещаем ссылку для авторизации пользователя на вашем сайте.

href=’https://connect.ok.ru/oauth/authorize?client_id=’.$socialConf[‘client_id’].
‘response_type=codelayout=w $_GET[‘code’],
‘client_id’ => $socialConf[‘client_id’],
‘client_secret’ => $socialConf[‘client_secret’],
«redirect_uri» => $socialConf[‘redirect_uri’],
«grant_type» => «authorization_code»
)
);
$opts = array(‘http’ =>
array(
‘method’ => ‘POST’,
‘header’ => ‘Content-type: application/x-www-form-urlencoded’,
‘content’ => $postReq
)
);
$context = stream_context_create($opts);
$tokenReq = file_get_contents(‘https://api.ok.ru/oauth/token.do?’, false, $context);
$tokenArr = json_decode($tokenReq, true);
//Обрабатываем ошибки
if(isset($tokenArr[‘access_token’]) and $tokenArr[‘access_token’]!=null) //получаем данные пользователя
>

$secret_key = MD5($tokenArr[‘access_token’] . $socialConf[‘client_secret’]);
$sig = MD5(«application_key=» . $socialConf[‘application_key’] . «format=jsonmethod=users.getCurrentUser» . $secret_key);
$usrReq = file_get_contents(«https://api.ok.ru/fb.do?
application_key=» . $socialConf[‘application_key’] . » .
«sig=» . $sig . «> Авторизация через facebook

href=’https://www.facebook.com/dialog/oauth?client_id=’.$socialConf[‘client_id’].
‘response_type=code’

$tokenReq = file_get_contents(«https://graph.facebook.com/oauth/access_token?client_id .$socialConf[«redirect_uri»].»code access_token»]) and $tokenArr[«access_token»]!=null) //получаем данные пользователя
>

$usrReq=file_get_contents(«https://graph.facebook.com/me?access_token access_token»].
«);
$usrArr = json_decode($usrReq, true);
//Обрабатываем ошибки
if(isset($usrArr[«id»]) and $usrArr[«id»]!=null) >

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

https://oauth.vk.com/authorize?client_id=’.$socialConf[‘client_id’].
‘redirect_uri=’.$socialConf[‘redirect_uri’].
‘response_type=codehttps://oauth.vk.com/access_token?
client_id redirect_uri ]) and $tokenArr[«access_token»]!=null) //получаем данные пользователя
>

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

Гостевой и личный профили пользователя

Приложение может получить доступ к информации гостевого или личного профилям пользователя в зависимости от своих настроек и разрешений пользователя. В гостевом профиле публикуется минимум данных, доступных всем. В личном профиле публикуется информация доступная друзьям. Некоторые данные (день рождения, E-Mail и другие) нельзя получить без разрешений к личному профилю или открытия их для доступа всем.

Ссылка на станицу по id в социальной сети
  • ВКонтакте: https://vk.com/idYOUR_id
  • Одноклассники: https://ok.ru/profile/YOUR_uid
  • Фэйсбук: к сожалению зная id пользователя получить ссылку на его страницу не получиться, теперь для этого требуется доступ к личному профилю пользователя.
Еще по теме:  Сделать круглую аватарку для ВК
Один redirect_uri для всех соц. сетей

Поскольку все соц. сети обращаются методом GET с параметром code на страницу авторизации redirect_uri их необходимо как-то идентифицировать.

if (isset($_GET[‘state’]) and $_GET[‘state’]==’ok’) <
//В одноклассниках есть параметр state вместе с code.
>else <
if (strlen($_GET[‘code’]) Комментарии: 1 Ответы: 0

+0 -0

Источник: rightjoint.ru

Рейтинг
( Пока оценок нет )
Загрузка ...