ФорумПрограммированиеPythonDjango → Авторизация через всякие соц. сети в Django. Кто и как это решает?

Авторизация через всякие соц. сети в Django. Кто и как это решает?

  • adw0rd

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

    Spritz 25 июня 2012 г. 15:58, спустя 22 дня 7 часов

    Инетресуют готовые компоненты, например:
    * https://github.com/krvss/django-social-auth <- ВЫБОР РЕДАКЦИИ
    * https://github.com/vgarvardt/django-loginza
    * http://pypi.python.org/pypi/django-ulogin <- НЕ ПОНРАВИЛСЯ
    UPD: https://bitbucket.org/offline/django-publicauth

    А в теории, думалось использовать так:
    * Есть Auth объекты (сейчас больше всего похож на него django.contrib.auth.models.User, но это не совсем то). В Auth хранится только тип авторизации и разнородные доп. данные (можно EAV, сериализованный объект, монгу и т.д., не суть)
    * Далее, есть User/Profile как угодно, в котором находятся нужные проекту поля, такие как birthday, gender и т.д.
    * User имеет ForeignKey к Auth

    В моём понимании не надо делать единный User, а разбивать на два, тогда предложенный джангой вариант мне более чем подходит.
    С другой стороны многие юзают единный объект пользователя, кто просто не использует django.contrib.auth.models.User, а другие юзают что-то типа того (в кратце юзают https://github.com/aino/django-primate)

    Как вы реализовываете это в своих приложения (не обязательно Django)?
    adw/0
  • phpdude

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

    Spritz 5 марта 2012 г. 5:04, спустя 14 часов 6 минут 41 секунду

    https://github.com/vgarvardt/django-loginza

    хуйня блин сырая :-(
    там генерация "temporary username" страдает по черному, пришлось ее под себя переписать, не не манкипатчингом))
    Сапожник без сапог
  • adw0rd

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

    Spritz 5 марта 2012 г. 5:06, спустя 1 минуту 40 секунд

    Только узнал, что http://loginza.ru/ делает Яндекс, в футере написано
    Спустя 75 сек.
    phpdude, а что по теории? Если предложения?
    adw/0
  • Sinkler

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

    Spritz 5 марта 2012 г. 5:08, спустя 1 минуту 37 секунд

    http://loginza.ru/ делает Яндекс

    изначально не они, купили пол годика назад где-то
  • adw0rd

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

    Spritz 5 марта 2012 г. 5:09, спустя 1 минуту

    Получается Auth(auth_type, user, last_auth_data), AuthType(name), User(auth, …)
    adw/0
  • phpdude

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

    Spritz 5 марта 2012 г. 5:17, спустя 8 минут 42 секунды

    adw0rd, Во первых должны быть Service Provider список. Хоть в виде модели, хоть в виде обычного list'а, чтобы можно было фильтровать в админке и тп.

    А там по сути

    UserMap:
    provider = enum/foreign key
    identytity = char(250)
    user = foreign key
    extra= JSON_DATA например access_token

    Причем extra можно вынести в отдельную тублицу OneToOne, чтобы размер таблицы юзер мапа был не пиздец огромным.

    При авторизации через OpenID Provider'а, ищем его identity (user url/user id/etc) в этой хеш таблице(identyty => user), если найден - через свой аутх бекенд авторизуем его, обновляем extra params (по вкусу, есть плюшки если юзать, а лая постинг на стену/стрим и тп), если не найден - регистрируем пользователя, потом его авторизуем.

    в общем то больше базово ничего на первый взгляд не надо ну и на каждый service provider мы создаем по своему "LoginController", которые обрабатывают запросы, проверяют подписи, фетчат токены и другое.

    Можно юзать логинзу :-)

    Она делает все что делает LoginController, только нативно и тебе предоставляет инфу, но она это делает ебано - через 10 окошек, что мне не нравится, я тут для себя сделал авторизацию через контакт, классно получилось :-)

    Кнопку "Авторизоваться" жмак - велкам, ты авторизован и зарегистрирован, даже OK нигде не надо нажимать, ну окромя окошка подтверждения входа черз контакт на данный APP Service. Окошко отобраажется один раз, потом тебе выписывают Access token и ты больше не видишь это окно.
    Спустя 110 сек.

    Получается Auth(auth_type, user, last_auth_data), AuthType(name), User(auth, …)
    Заводить своего User смысла я не вижу, тогда придется полжанги переписать :-)

    А тут можно еще в принципе сразу Profile завести и мапинг легко натсраиваемый сделать (ведь соц сети могут дать много инфы о юзере), чтобы сразу профайл создавать.
    Сапожник без сапог
  • adw0rd

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

    Spritz 5 марта 2012 г. 5:41, спустя 23 минуты 19 секунд

    Спасибо, у меня так и получается :)
    Спустя 52 сек.
    Попробуй https://github.com/krvss/django-social-auth, там есть вконтакте, мейлру, яндекс и т.д.
    Спустя 40 сек.
    http://www.ikrvss.ru/tag/django-social-auth/
    adw/0
  • phpdude

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

    Spritz 5 марта 2012 г. 5:45, спустя 3 минуты 53 секунды

    Попробуй https://github.com/krvss/django-social-auth, там есть вконтакте, мейлру, яндекс и т.д.

    вконтакте

    А ВОТ ХУЙ! ОНИ ПИЗДАБОЛЫ :-)

    Backends

    OpenId
    OAuth
    Twitter
    Facebook
    Orkut
    Google OAuth
    Google OAuth2
    LinkedIn
    GitHub
    Dropbox
    Flickr
    BrowserID
    Instagram

    Спустя 22 сек.
    нет там ни яндекса ни вконтакта, думаешь я это не пробовал? :-)))
    Спустя 57 сек.
    поэтому я свой SP и написал, заодно узнал как работает (ну я так и думал, что он так и работает, но проверить != думать :-) ) OAuth 2.0 (1.0 - та же хуйня, не думаю сильно отличается)
    Сапожник без сапог
  • adw0rd

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

    Spritz 5 марта 2012 г. 5:47, спустя 2 минуты 29 секунд

    phpdude, ты пробовал оригинал, а я тебе предлагаю форк и ссылки давал только на форк, читай
    http://www.ikrvss.ru/2012/01/04/yandex-oauth/
    http://www.ikrvss.ru/2011/11/08/django-social-auh-and-vkontakte-application/ и т.д.

    там было упоминание ещё одноклассников, мейлру и т.д.
    Спустя 25 сек.
    пруф https://github.com/krvss/django-social-auth/tree/master/social_auth/backends/contrib
    adw/0
  • phpdude

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

    Spritz 5 марта 2012 г. 5:48, спустя 44 секунды

    adw0rd, ах :-)

    Ну в общем спасибо, я все равно давно хотел сам OAuth узнать, так что это было больше лаборатнрной работой ;)
    Сапожник без сапог
  • Troy

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

    Spritz 5 марта 2012 г. 5:52, спустя 3 минуты 57 секунд

    Ребята, на finle.ru юзаю логинзу, многие люди жалуются на ошибки. сервис сырой и почти не развивается. Как альтернатива можно попробовать uLogin, они недавно на хабре писали. там хотя бы люди работают.
  • phpdude

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

    Spritz 5 марта 2012 г. 5:57, спустя 5 минут 19 секунд

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

    Смело
    Спустя 203 сек.
    да логинза так себе, я столкнувшись понял, что и правда лучше свой написать. логинза тупо неудобная
    Сапожник без сапог
  • adw0rd

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

    Spritz 5 марта 2012 г. 5:57, спустя 17 секунд


    Ребята, на finle.ru юзаю логинзу, многие люди жалуются на ошибки. сервис сырой и почти не развивается. Как альтернатива можно попробовать uLogin, они недавно на хабре писали. там хотя бы люди работают.
    ой, тут даже есть http://pypi.python.org/pypi/django-ulogin
    adw/0
  • phpdude

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

    Spritz 5 марта 2012 г. 6:01, спустя 3 минуты 30 секунд

    судя по описалову, uLogin уже получше логинзы..
    Сапожник без сапог
  • adw0rd

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

    Spritz 5 марта 2012 г. 6:14, спустя 13 минут 9 секунд

    https://github.com/marazmiki/django-ulogin
    Спустя 111 сек.
    да, с виду он намного лучше логинзы
    adw/0

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