Описание сервиса
Loginza — это сервис, который работает как мостик между вашим сайтом и множеством сторонних OpenID и OAuth провайдеров. Другими словами, сервис позволяет авторизоваться на вашем сайте с помощью аккаунтов Вконтакте, Яндекс, Google, Twitter и многих других.
Процесс авторизации с помощью Loginza
- Пользователь нажимает ссылку Войти с помощь, после чего открывается форма выбора OpenID провайдера, как на картинке выше.
- Пользователь выбирает провайдера, с помощью которого он хочет авторизоваться.
- Пользователь нажимает кнопку Продолжить и попадает на страницу провайдера (если он делает это в первый раз) где он должен разрешить передавать свои данные сайту.
- Сервис Loginza получает личные данные, заносит их в свою базу и редиректит пользователя на страницу указанную в
token_url
(об этом ниже). - Скрипт, указанный в
token_url
, запрашивает данные с сервера Loginza и по ним авторизует пользователя.
Подключение виджета к сайту
Во первых, нужно подключить служебный js файл и вывести ссылку, по которой будет показываться окно выбора провайдеров:
<script src="http://loginza.ru/js/widget.js" type="text/javascript"></script>
<a href="http://loginza.ru/api/widget?token_url=<?php echo urlencode('http://example.com/loginza.php'); ?>" class="loginza">Войти с помощью ...</a>
В параметре token_url
нужно передать абсолютный путь к скрипту, который будет проводить авторизацию. Класс у ссылки должен быть loginza
.
Во вторых, создать скрипт, указанный в token_url
(в примере это loginza.php
), c примерным содержанием:
if (!isset($_POST['token']))
{
die('Ошибка: Отсутствует токен');
}
// получаем данные о пользователе с сервера Loginza
$loginzaUserInfo = file_get_contents('http://loginza.ru/api/authinfo?token=' . $_POST['token']);
// декодируем данные, так как они приходят в json формате
$loginzaUserInfo = json_decode($loginzaUserInfo);
if (!isset($loginzaUserInfo->identity))
{
die('Ошибка: ' . $loginzaUserInfo->error_message);
}
// 1. ищем в базе пользователя по уникальному идентификатору $loginzaUserInfo->identity
// 2. если его нет, то создаём нового пользователя
// 3. авторизуем пользователя
// 4. редиректим на главную страницу или на профиль
Вот и всё.
Объект $loginzaUserInfo
, в зависимости от выбранного провайдера, может содержать различные свойства, например у Google это:
stdClass Object
(
[identity] => https://www.google.com/accounts/o8/id?id=UfjloYgsddsfllIksdfsdflbgw
[provider] => https://www.google.com/accounts/o8/ud
[name] => stdClass Object
(
[first_name] => Василий
[last_name] => Тараканов
[full_name] => Василий
)
[email] => vasili@gmail.com
[language] => ru
[address] => stdClass Object
(
[home] => stdClass Object
(
[country] => RU
)
)
[uid] => 32445456546456
[photo] => http://www.google.com/ig/c/photos/public/AIbEiAIAAABDCL2p
)
а у Twitter:
stdClass Object
(
[identity] => http://twitter.com/vasili
[provider] => http://twitter.com/
[nickname] => vasili
[web] => stdClass Object
(
[default] => http://vasili.com
)
[name] => stdClass Object
(
[full_name] => vasili
)
[photo] => http://a2.twimg.com/profile_images/654897/a_772341f_normal.jpg
[uid] => 56465789
)
Как видно Twiiter не передаёт e-mail и адрес, зато передаёт ник. Обязательными здесь являются только identity
и provider
. Это нужно учесть при добавлении пользователя в базу.
Комментарии
Спасиб огромное. нечто подобно недавно искал. оч помог
Самое интересное с авторизацией то и не написали.
А так летом натыкался на модуль для логинзы (где авторизации толком и нет):
http://docs.drupal.ru/node/45330
ну в простейшем случае это установка кукиса с идентификатором пользователя, ничего интересного тут нет :) всё зависит от внутреннего механизма движка (cms). тема слишком размытая чтобы на ней останавливаться
А кто все пароли от этих сервисо хнанит ? :)
Кроме пользователя еще и этот сервис будет знать мои данные ?
достаточно пароля от одного OpenID провайдера (и то, только в том случае если вы на нём не авторизованы), хранит их разумеется пользователь. это гораздо удобнее чем на каждый сайт придумывать новый логин/пароль и заполнять горы анкет при регистрации.
OpenID открытый протокол, не хотите светить свои данные — просто не заполняйте их в своём профиле. Хотя такие провайдеры как myopenid.com дают возможность создать несколько профилей под одним аккаунтом, и выбирать любой при авторизации.
Большое спасибо! Облазил кучу сайтов, ничего толкового небыло... тут с первого раза заработало !
А вы с uLogin это сравнивали? Что лучше?
Добавить комментарий