Авторизація через соціальні мережі: Facebook

18

Від автора: в даний час соціальні мережі користуються величезною популярністю серед користувачів інтернету. Тому іноді буває зручно при створенні реєстрації або авторизації користувачів на сайті використовувати дані з соціальної мережі Facebook, що значно полегшить вхід користувача на сайт. У даному уроці ми з Вами поговоримо про те, як створити механізм авторизації користувача на сайті, використовуючи ресурси соціальної мережі Facebook.

Авторизація через соціальні мережі: FacebookАвторизація через соціальні мережі: Facebook

Постановка задачі

Для авторизації через соціальну мережу Facebook, використовується відкритий протокол OAuth 2.0. OAuth — це відкритий протокол авторизації, який дозволяє отримати Вам – розробникам доступ до ресурсів користувача зберігаються наприклад в соціальній мережі Facebook. При цьому користувачеві не потрібно повідомляти Вам свій логін і пароль для доступу до його даних.

Дана система авторизації працює наступним чином. Першим ділом користувач повинен пройти авторизацію в соціальній мережі, для цього зі свого сайту Ви перенаправляти його на певну адресу соціальної мережі (про який ми ще поговоримо). Потім після успішної авторизації — Facebook, назад перенаправляє користувача на Ваш сайт, при цьому Вам буде переданий спеціальний код, який необхідний для отримання даних користувача і свідчить про успішну авторизацію.

Тепер, так як ми будемо працювати безпосередньо з соціальною мережею, наш скрипт повинен розташовуватися на реальному сервері. Так як проходитиме постійний обмін даними між нашим скриптом і сервісом Facebook. При цьому на локальному комп’ютері (наприклад Denwer) скрипт працювати не буде.

Для зручності роботи з віддаленим сервером, ми будемо використовувати текстовий редактор Notepad++, який містить вбудований плагін по роботі з протоколом FTP. Використовуючи який, ми можемо відкривати і редагувати файли скрипта безпосередньо на віддаленому сервері. Для цього запускаємо текстовий редактор відкриваємо меню Plugins, далі NppFTP і активуємо Show NppFTP Window. При цьому буде відкрито вікно огляду файлів і папок віддалених серверів. У даному вікні необхідно відкрити налаштування (кнопка Settings), а саме налаштування профілю (Profile Settings) і додати новий профіль для з’єднання з ftp сервером (при цьому необхідно вказати налаштування підключення). Потім, клацнувши по кнопці Connect виконуємо з’єднанні через FTP.

Для додавання нових файлів, досить правою кнопкою клацнути по відповідній папці і вибрати Create new file. Відкрити відповідний файл можна подвійним клацанням миші.

Створення програми

Для отримання даних користувачів соціальної мережі Facebook, Вам обов’язково необхідний акаунт даної мережі, а також необхідно створити додаток, який безпосередньо буде працювати з даними користувача. Для цього переходимо в Facebook, авторизируемся і на сторінці https://developers.Facebook.com/?ref=mb переходимо по вкладці Програми вибираємо «Create a new app»:

Авторизація через соціальні мережі: Facebook

Вводимо ім’я додатка і вибираємо категорію, потім натискаємо посилання Створити додаток. Далі, для підтвердження, необхідно ввести графічну капчу. Після цього буде створено новий додаток (може виникнути ситуація, коли після введення капчі, Вас перенаправляють на сторінку введення імені додатки – це нормально і досить натиснути Скасування, а потім оновити сторінку).

Авторизація через соціальні мережі: Facebook

Далі переходимо в нове створене додаток:

Авторизація через соціальні мережі: Facebook

На цій сторінці нам знадобляться ідентифікатор додатка і його секретний ключ (App Secret). ВАЖЛИВО: нікому не повідомляйте ці дані і не викладайте у відкритому вигляді на сторінках свого сайту. Так як ці дані ідентифікують Ваше програми і можуть бути використані зловмисниками. Далі переходимо на вкладку Налаштування та натискаємо кнопку Додати платформу.

Авторизація через соціальні мережі: Facebook

Тут потрібно вибрати Веб-сайт і вказати адресу Вашого сайту. Після цього зберігаємо зміни нашого застосування.

Отримання параметра code

Отже, першим ділом створимо файл конфігурації config.php:

Константи:

URL_AUTH – адресу сторінки авторизації Facebook;

CLIENT_ID – ідентифікатор програми;

SECRET – секретний ключ програми;

REDIRECT – шлях на який буде відправлений параметр code, в нашому випадку ми створимо файл auth.php, який буде обробляти всі дані;

TOKEN – адресу, за якою треба надіслати запит для отримання access_token – ключ доступу до даних користувача;

GET_DATA – адресу, за якою треба надіслати запит для отримання даних користувача.

Далі створимо файл functions.php в якому, будемо описувати функції, необхідні для роботи скрипта. Потім на нашому сайті створюємо сторінку авторизації, наприклад, ось такого змісту файл index.php):

Авторизація

Тобто, якщо ми отримали параметр code, значить, викличемо функцію get_token(), передавши їй отриманий параметр code. Відкриваємо файл functions.php і створимо функцію get_token():

function get_token($code) {
$ku = curl_init();
$query = «client_id=».CLIENT_ID.»&redirect_uri=».urlencode(REDIRECT).»&client_secret=».SECRET.»&code=».$code;
curl_setopt($ku,CURLOPT_URL,TOKEN.»?».$query);
curl_setopt($ku,CURLOPT_RETURNTRANSFER,TRUE);
$result = curl_exec($ku);
if(!$result) {
exit(curl_error($ku));
}
if($i = json_decode($result)) {
if($i->error) {
exit($i->error->message);
}
}
else {
parse_str($result,$token);
if($token[‘access_token’]) {
return $token[‘access_token’];
}
}
}

Для отримання access_token, необхідно надіслати запит за адресою https://graph.Facebook.com/oauth/access_token і передати наступні дані:

client_id – ідентифікатор програми;

redirect_uri – аналогічно як для отримання code;

client_secret – секретний ключ програми;

code – отриманий code.

Для відправки запиту використовуємо бібліотеку curl. Зверніть увагу, що в результаті успішного запиту ми отримаємо рядок виду:

access_token=CAAFQLvUKJMcBAPhDrAkMMmSj5Q62jzQhf1x2i4lwsjqcgzclzbh6ckk7j
THf0Oh8EHGwwTl0ibXTDhXT39zOSWa1Nypdu85crizg9uau2ilaqdzc4riomsiro0ezcucu
wiul5t85xZCdJzk3JEod4LaQ7vTfpukxb5rkkc8rmqfhtkd5xwvjq&expires=5182962

Тобто це рядок запиту, яку можна використовувати в адресному рядку, а значить, якщо застосувати функцію parse_str($result,$token), ми в масиві $token отримаємо дві клітинки access_token, з ключем доступу і expires – період його актуальності. Тобто масив наступного виду:

Авторизація через соціальні мережі: Facebook

У разі виникнення помилки В результаті запиту ми отримаємо рядок формату JSON, наступного виду:

{«error»:{«message»:»This authorization code has been used.»,»type»:»OAuthException»,»code»:100}}

Значить її можна конвертувати в об’єкт, використовуючи jsone_decode(). При цьому можна вивести на екран повідомлення про помилку. Що, власне я зробив функції. Таким чином функція або повертає ключ access_token, або виводить на екран повідомлення про помилку.

Отримання даних користувача

Після отримання ключа access_token, ми можемо отримати доступ до його даних, надіславши запит за адресою https://graph.Facebook.com/me. При цьому необхідно відправити тільки access_token. Тому у файлі auth.php додамо наступний код (після виклику методу get_token):

if($result) {
print_r(get_data($result));
}

Тобто якщо ми отримали access_token, значить, викликаємо функцію get_data(), код якої додамо в файл functions.php.

function get_data($token) {
$ku = curl_init();
$query = «access_token=».$token;
curl_setopt($ku,CURLOPT_URL,GET_DATA.»?».$query);
curl_setopt($ku,CURLOPT_RETURNTRANSFER,TRUE);
$result = curl_exec($ku);
if(!$result) {
exit(curl_error($ku));
}
return json_decode($result);
}

Знову ж таки, аналогічно відправляємо запит, використовуючи бібліотеку CURL, при цьому в результаті успішного запиту, ми отримаємо рядок формату JSON з даними користувача, або повідомлення про помилку, якщо звичайно вона була. Тому дану рядок перетворитися в об’єкт і повертаємо як результат роботи функції. На екрані ми побачимо наступне:

Авторизація через соціальні мережі: Facebook

Мій профіль у Facebook заповнений не повністю, тому ми бачимо дуже мало інформації. Тепер отриману інформацію про користувача, Ви можете використовувати на свій розсуд. Наприклад, можна зберегти в базі даних, таким чином реалізувавши механізм реєстрації.

На цьому даний урок завершено. Всього Вам доброго і вдалого кодування!!!