Разработка сайта для Вашего бизнеса. Веб дизайн. Дизайн логотипа, фирменного стиля, рекламная фотография . Комплексный рекламный креатив.

Ralex. We do the work.
На рынке с 1999го года. Средняя ценовая категория. Ориентация на эффективность решений.
Ознакомтесь с нашим портфолио
Узнайте больше о услугах
Свяжитесь с нами:
E-mail: [email protected]
Tel: (044) 587 - 84 - 78
Custom web design & дизайн и разработка сайта "под ключ"
Креативный, эффективный дизайн. Система управления сайтом (СУС).
Custom flexible разработка систем электронной коммерции
Система e-commerce разрабатывается под индивидуальные потребности. Гибкая функциональность.
Search Engine Optimzation & оптимизация под поисковые системы (SEO)
Постоянная оптимизация и мониторинг сайта в поисковых системах. Достигаем результата быстро и эффективно
Custom logo design & дизайн логотипа и фирменного стиля
Многолетний опыт. Огромное портфолио. Уникальное предложение и цена.
профессиональная рекламная фотография
креативно, смело, качественно
Custom logo design & рекламный креатив. дизайн рекламы
Многолетний опыт. Огромное портфолио. Уникальное предложение и цена.

Loginza - модуль авторизації на PHP

Наша взаимовыгодная связь https://banwar.org/

Останнім часом стало дуже модно використовувати авторизацію на сайтах за допомогою соціальних мереж, облікові записи яких є практично у кожного користувача всесвітньої павутини. Це не тільки зручно, але й дуже функціонально, що дає масу інформації про користувача, який тільки зайшов на ваш сайт. У зв'язку з цим у багатьох з'являється необхідність організувати зв'язок між соціальними мережами, базою даних і своїм сайтом. Найбільш раціональним я бачу використання сервісу, ніж збирати по шматочках з кожної соціальної мережі модулі. В даній статті піде мова про організацію авторизації на сайті за допомогою сервісу Loginza.

Перше що нам потрібно встановити кнопки авторизації на сайт. Для цього необхідно вбудувати в нашу сторінку невеликий HTML код. Наприклад, якщо потрібні абсолютно всі сервіси авторизації, які надає Loginza, досить коду:

<Script src = "http://loginza.ru/js/widget.js" type = "text / javascript"> </ script> <a href = "https://loginza.ru/api/widget?token_url= http: //loginza.test/login.php "class =" loginza "> Вхід через OpenID </a>

Тоді діалог входу буде виглядати наступним чином:

Якщо необхідно обмежити число сервісів для вибору, в прикладі буде використовуватися саме цей варіант, то необхідно вставити код:

<Script src = "http://loginza.ru/js/widget.js" type = "text / javascript"> </ script> <a href = "https://loginza.ru/api/widget?token_url= http: //loginza.test/login.php&provider=vkontakte&providers_set=vkontakte,facebook,twitter "class =" loginza vkontakte_button "> </a> <a href =" https://loginza.ru/api/widget?token_url= http: //loginza.test/login.php&provider=facebook&providers_set=vkontakte,facebook,twitter "class =" loginza facebook_button "> </a> <a href =" https://loginza.ru/api/widget?token_url= http: //loginza.test/login.php&provider=twitter&providers_set=vkontakte,facebook,twitter "class =" loginza twitter_button "> </a>

Тоді діалог прийме такий вигляд:

У вихідному коді все дуже просто, підключаємо бібліотеку Loginza, вставляємо посилання на кнопки, параметр яких в token_url містить посилання, на яку буде проводитися переадресація після авторизації, а також список у вигляді параметрів, кнопками яких сервісів необхідно обмежити авторизацію.

Потім нам необхідно створити таблицю в базі даних MySQL, в якій буде зберігатися інформація про користувача.

Структура таблиці бази даних буде виглядати наступним чином:

З такою структурою у нас виходить унікальна зв'язка provider + uid яка не може повторитися в жодного користувача і id - для обліку користувачів всередині сайту (SQL файл додається в исходниках).

Тепер я б хотів продемонструвати наочно, на прикладі, як можна організувати авторизацію за допомогою Loginza.

Ось як виглядає вихідний код головної сторінки index.php:

<? Php session_start (); // кнопки для авторизації function show_login_form () {?> <P> <strong> Вхід як користувач </ strong> </ p> <script src = "http://loginza.ru/js/widget.js" type = "text / javascript"> </ script> <a href = "https://loginza.ru/api/widget?token_url=http://loginza.test/login.php&provider=vkontakte&providers_set=vkontakte,facebook,twitter" class = "loginza vkontakte_button"> </a> <a href = "https://loginza.ru/api/widget?token_url=http://loginza.test/login.php&provider=facebook&providers_set=vkontakte,facebook,twitter" class = "loginza facebook_button"> </a> <a href = "https://loginza.ru/api/widget?token_url=http://loginza.test/login.php&provider=twitter&providers_set=vkontakte,facebook,twitter" class = "loginza twitter_button"> </a> <? php} // відображення імені і кнопки для виходу function show_menu () {if ($ _ SESSION [ 'provider'] == 'http://vkontakte.ru/') { $ icon_class = 'vk_icon social_small_icon'; } Elseif ($ _ SESSION [ 'provider'] == 'http://www.facebook.com/') {$ icon_class = 'facebook_icon social_small_icon'; } Elseif ($ _ SESSION [ 'provider'] == 'http://twitter.com/') {$ icon_class = 'twitter_icon social_small_icon'; } Echo '<div class = "'. $ Icon_class. '"> </ Div>'. $ _ SESSION [ 'firstname']. ''. $ _SESSION [ 'lastname']; echo '<div> <a href="/exit.php"> Вийти </a> </ div>'; }?> <! DOCTYPE html> <html> <head> <meta http-equiv = "Content-Type" content = "text / html; charset = UTF-8"> <link rel = "stylesheet" media = "screen "type =" text / css "href =" style.css "/> <title> Авторизація за допомогою Loginza - sanchiz.net </ title> </ head> <body> <? php if (! isset ($ _ SESSION [ 'id'])) {show_login_form (); } Else {show_menu (); }?> </ Body> </ html>

Тут все просто, 2 функції, одна для показу кнопок для авторизації:

друга для показу інформації, якщо користувач успішно пройшов авторизацію:

Наступна частина модуля, вона ж сама функціональна це файл login.php:

<? Php // підключення до бази даних $ db = mysql_pconnect ( 'localhost', 'admin', '111111', 128); mysql_select_db ( 'loginza_test'); // перевірка отримання токена if (! Isset ($ _ POST [ 'token'])) {$ error = 'Помилка отримання токена.'; } // відправляємо запит на отримання даних користувача elseif (false === ($ authData = file_get_contents ( 'http://loginza.ru/api/authinfo?token='.$_POST [' token ']))) {$ error = 'Помилка отримання даних.'; } // якщо сталася помилка if (isset ($ error)) {echo '<p>'. $ Error. '</ P>'; } Else {// декодуємо дані про користувача з формату JSON $ user = json_decode ($ authData); // var_dump ($ user); // якщо провайдер Вконтакте if ($ user-> provider == 'http://vkontakte.ru/') {$ uid = $ user-> uid; $ Provider = $ user-> provider; $ Firstname = $ user-> name-> first_name; $ Lastname = $ user-> name-> last_name; $ Identity = $ user-> identity; } // якщо провайдер Facebook elseif ($ user-> provider == 'http://www.facebook.com/') {$ uid = $ user-> uid; $ Provider = $ user-> provider; $ Firstname = $ user-> name-> first_name; $ Lastname = $ user-> name-> last_name; $ Email = $ user-> email; $ Identity = $ user-> identity; } // Якщо провайдер Twitter elseif ($ user-> provider == 'http://twitter.com/') {$ uid = $ user-> uid; $ Provider = $ user-> provider; $ Firstname = $ user-> name-> full_name; $ Identity = $ user-> identity; } Else {echo '<p> Невідомий провайдер. </ P>'; } If ($ uid && $ provider) {$ sql = 'SELECT * FROM users WHERE provider = "'. $ Provider. '" AND uid = "'. $ Uid. '"'; $ Result = mysql_query ($ sql); session_start (); // якщо такого користувача немає в базі даних заносимо інформацію в базу if ((mysql_num_rows ($ result)) == 0) {$ sql = 'INSERT INTO users (uid, provider, identity, firstname, lastname, email) VALUES ( " '. $ uid.' "," '. $ provider.' "," '. $ identity.' "," '. $ firstname.' "," '. $ lastname.' "," '. $ email. ' ")'; mysql_query ($ sql); $ User_id = mysql_insert_id (); $ _SESSION [ 'id'] = $ user_id; $ _SESSION [ 'provider'] = $ provider; $ _SESSION [ 'uid'] = $ uid; $ _SESSION [ 'firstname'] = $ firstname; $ _SESSION [ 'lastname'] = $ lastname; } // якщо користувач вже існує то присвоюємо йому інформацію з бази else {$ user_row = mysql_fetch_assoc ($ result); session_start (); $ _SESSION [ 'id'] = $ user_row [ 'id']; $ _SESSION [ 'provider'] = $ user_row [ 'provider']; $ _SESSION [ 'uid'] = $ user_row [ 'uid']; $ _SESSION [ 'firstname'] = $ user_row [ 'firstname']; $ _SESSION [ 'lastname'] = $ user_row [ 'lastname']; } // редирект на головну сторінку Header ( 'Location: /'); }}?>

У ньому спочатку виконується з'єднання з бази даних, далі перевірка відданого Loginza. Якщо токен отриманий, то відправляємо запит на отримання даних користувача. Коли дані отримані, ми декодуємо їх з JSON формату функцією json_decode. Конструкція яка виконує присвоєння даних в залежності від провайдера виглядає досить громіздко, але тут вже нічого не поробиш, всі сервіси по-різному віддають інформацію, тому доводиться враховувати кожен випадок. Наступне що ми робимо це запит до бази даних, який вибирає користувача з uid і provider отриманого від Loginza. Якщо такий користувач вже існує то ми просто присвоюємо змінної сесії дані з бази. Якщо такого користувача не існує, то ми заносимо отриману інформацію в базу даних і після чого слід переадресація на потрібну нам сторінку, де ми вже побачимо посилання на вихід з облікового запису і іконку соціальної мережі з ім'ям, отриманим від сервісу.

Ну і останнє це файл exit.php, за допомогою якого можна виконати вихід з облікового запису:

<? Php session_start (); session_unset (); session_destroy (); header ( "Content-type: text / html"); header ( 'Location: /'); ?>

Тут все дуже просто, знищуємо сесію і переадресовуємо користувача на головну сторінку.

Ось так легко можна реалізувати авторизацію за допомогою соціальних мереж. Можливо, деякі моменти реалізації я упустив, але це лише доводить всю міць вільної авторизації за допомогою oAuth.

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

Вихідний код

Ru/api/widget?
Ru/api/widget?
Ru/api/widget?
Ru/api/widget?
Php session_start (); // кнопки для авторизації function show_login_form () {?
Ru/api/widget?
Ru/api/widget?
Ru/api/widget?
Php&provider=twitter&providers_set=vkontakte,facebook,twitter" class = "loginza twitter_button"> </a> <?
Php"> Вийти </a> </ div>'; }?
Категории
  • Биология
  • Математика
  • Краеведению
  • Лечебная
  • Наука
  • Физике
  • Природоведение
  • Информатика
  • Новости

  • Новости
    https://banwar.org/
    Наша взаимовыгодная связь https://banwar.org/. Запустив новый сайт, "Пари Матч" обещает своим клиентам незабываемый опыт и возможность выиграть крупные суммы.


    Наши клиенты
    Клиенты

    Быстрая связь

    Тел.: (044) 587-84-78
    E-mail: [email protected]

    Имя:
    E-mail:
    Телефон:
    Вопрос\Комментарий: