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

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

  • adw0rd

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

    Spritz 25 июня 2012 г. 18: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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Spritz 5 марта 2012 г. 8: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

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

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

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

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

    Spritz 5 марта 2012 г. 8: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

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

    Spritz 5 марта 2012 г. 8: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

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

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

    adw0rd, ах :-)

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

    https://github.com/marazmiki/django-ulogin {+++111+++} да, с виду он намного лучше логинзы
    adw/0

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