ФорумПрограммированиеПыхнуть хотите?Готовые решения → Легкая OpenID авторизация

Легкая OpenID авторизация

  • rider-sx

    Сообщения: 2706 Репутация: N Группа: Адекваты

    Spritz 30 августа 2010 г. 21:13

    Раз уж пошла такая пьянка про все эти опенайди и т.п. я тоже задумался над этой темой, но мне не нравилось что для всех существующих классов нужен курл/сокет.
    После недолгих поисков решения сложившейся проблемы вспомнил про замечательный сервис loginza.ru.
    Ну и решил написать класс для роботы с этим сервисом.

    Вот пример:

    $json = new Services_JSON;
    $loginza = new Loginza($json);

    $loginza->setReturnPath('http://ridersx.no-ip.biz/ufo/openid/example.php');
    $loginza->setProviders(array('google', 'yandex', 'vkontakte'));

    if($loginza->inProgress()) {
    $info = $loginza->getAuthInfo();

    echo 'Hello '.$loginza->getUserName($info);
    } else {
    /*
           echo $loginza->getWidgetTextPopup('Sign in with OpenID');
    echo $loginza->getWidgetFrame();
    echo $loginza->getWidgetIcons();
           */

    echo $loginza->getWidgetButtonPopup('Sign in with OpenID');
    }


    Для работы класса нужно задать путь на который произойдет редирект после успешной авторизации у провайдера,
    а так же можно задать провайдеров через которых пользователю будет позволено авторизоваться.
    Коих дохуямного: google, yandex, vkontakte, facebook, steam, flickr, twitter, verisign, rambler, mailru и т.д.

    Есть несколько видов виджетов, их можно посмотреть тут, как их вызвать можно посмотреть в примере.

    Данные от провайдеров возвращаются в виде объекта, данные можно получить вот так: $loginza->getAuthInfo();

    В остальном думаю понятно как работать с классом :) Если что непонятно - дополню топик
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 30 августа 2010 г. 21:34, спустя 21 минуту 7 секунд

    Может я чего-то не понимаю, но зачем использовать класс для работы с JSON . если есть json_encode/decode() ?
  • rider-sx

    Сообщения: 2706 Репутация: N Группа: Адекваты

    Spritz 30 августа 2010 г. 22:04, спустя 29 минут 35 секунд

    Troy, При таком подходе можно написать свой класс для декодирования жсона с какаими нибудь фильтрами и прочими свистелками/перделками :)
  • rider-sx

    Сообщения: 2706 Репутация: N Группа: Адекваты

    Spritz 30 августа 2010 г. 22:09, спустя 5 минут 48 секунд

    Просто изначально думал что хотяб этот класс будет возвращать нормальный массив данных, и не объект, а когда понял что ошибся на этот счет, в силу своей линовости :) не стал убирать его этот класс можно легко заменить на свой с одним единственным методом decode() :)
  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz 2 декабря 2010 г. 13:23, спустя 93 дня 16 часов 13 минут

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

    if (!empty($data['name']['full_name'])) {
    $name = $data['name']['full_name'];
    } elseif ((!empty($data['name']['first_name'])) || (!empty($data['name']['last_name']))) {
    $name = $data['name']['first_name'].' '.$data['name']['last_name'];
    } elseif (!empty($data['nickname'])) {
    $name = $data['nickname'];
    } else {
    $name = $data['identity'];
    }


    Информация о пользователе, возвращаемая крупными OpenID-провайдерами
  • Mars

    Сообщения: 304 Репутация: N Группа: Кто попало

    Spritz 2 декабря 2010 г. 15:17, спустя 1 час 53 минуты 23 секунды

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

Пожалуйста, авторизуйтесь, чтобы написать комментарий!