Поддержка OpenID
Что-то меня прям пробило на код. :-) 4 месяца ничего не трогал, а за последние два дня прям сделал выше всяких норм. :-) В общем, OpenID работает. Причём он привязан к собственной джанговой системе аутентификации.
При логине с новым опенидом предлагается либо создать нового пользователя, либо привязать этот опенид к существующему пользователю (только введя пароль, иначе никак :)). К одному пользователю, что естественно и удобно, может быть привязано несколько OpenID’шных аккаунтов.
При том же первом логине сервер просит у провайдера опенида никнейм и мыло пользователя, а если не отдаёт - пытается угадать его (ну, угадывание достаточно тупое - он просто берёт первую часть имени домена опенида, сделано это как воркэраунд для ЖЖ, которая не отдаёт ни под каким видом ничего).
P.S.Сама поддержка OpenID - это django-openidconsumer Саймона Виллисона с патчем Benoit’а Chesneau (ух, затрудняюсь это на русском написать ;))
P.P.S.Если будут замечены глюки или баги, просьба отписать в комментариях или создать новый тикет в траке.
Comments
При второй попытке зарегистрироваться через OpenID.
TypeError at /openid/ expected string or buffer
При первой попытке все отработало нормально.
Поправка: оно пользовалось результатами первой попытки (считало уже зарегистрированным), но почему-то показало поле для ввода OpenID. Reload страницы убрал поле OpenID и все стало нормально.
Хм. Я подумаю над этим.
Не получается схватить тот же еррор. :( Ввожу openid - и поле пропадает.
Но вообще да, это надо бы во вью поправить. Там самая большая проблема в коде - он не сильно красивый, и потому не слишком легко модифицируемый. :)
Если я не позабыл окончательно свой французский, то Benoit Chesneau читается как Бенуа Шено. Или Шесно :-).
Хех, я по его имени (Benoit) подумал, что он еврей. :)
Кстати.. А можно в двух словах, насколько различаются по удобству в использовании подходы как у Саймона — с явным request.openid и, например, как у меня, когда для каждого openid автоматически создается и авторизуется request.user?
У него есть определённый плюс - к одному пользователю может быть привязано несколько openid. Мне кажется, что это правильный подход.
Хотя, должен сказать, что код после наложения патча от Бенуа (до - я не смотрел) не слишком красивый. В траке можно глянуть, и то, я его по мере сил причесал слегка. Но, чувствую, придётся переделать посимпатичнее, а то мне как-то это всё не совсем нравится.
Кстати, когда я смотрел реализацию openid из cicero, она не привязывала пользователя к openid, вроде… Плюс нужна была директория, а мне это реально не сильно удобно. :)
Привязывает, привязывает:
А у тебя что в качестве стораджа? БД?
Ага, БД. Вот здесь модель Association. В общем, реально я взял эту реализацию только из-за двух вещей - хранение в базе и много опенидов на одного юзера (хоть и не автоматически, но мне кажется, что это допустимое зло :)).
Тэкс. Буду на этом примере посмотреть, что такое django :)
Отлично, отлично… :) Надеюсь, мой вариант её использования не покажется сильно ужасным. :D
P.S.Код в openidconsumer/*.py, как я говорил, точно некрасивый. :]
Хех, увидел твой ник - и вспомнил про фид по тегу. Готово! :)
Comment form for «Поддержка OpenID»