• 15Oct

    Меня тут долго не было… Ремонт… Новая работа… Кучу всего свалилось… Даже за сервак забыл заплатит. Так что спасибо Гугу, напомнил.

    В первой части я рассказывал, как авторизовать человека по OpenID. В этой части я хотел предоставить свое виденье того, как это можно привязать к стандартной джанговской авторизации. Апп можно скачать тут

    Кроме того, что мы хотим узнать, что текущий пользователь на сайте авторизуется через OpenID. Мы хотим его авторизовать по всем правилам Django. И чтобы авторизированный пользователь через OpenID был таким же как и через стандартную Django авторизацию. Т.е. попробуем прижить вместе несколько авторизаций.

    Через массив бекендов у меня так и не получилось. Т.к. я хотел, чтоб у них был общий айдишник, и чтоб хранились они в общей таблице. Поэтому я просто расширил базовую авторизацию дополнительным функционалом. В последствии даже попробовал установить openid к уже рабочему проекту.

    Для определения, к какой авторизации принадлежит я пользователя привязывал к группе. Название группы, к которой я привязывал пользователя можно положить в настройки проекта OPENID_GROUP по умолчанию это значение OpenID.

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

    Сначала опишу процесс установки. На готовое, живое приложение.

    1. Распаковываем файлы из архива в любую папку вашего проекта. К примеру в openidconsumer.
    2. В установленные приложения проекта (INSTALLED_APPS) устанавливаем новое ‘openidconsumer’
    3. Заменяем бекенд авторизации на наш наследник от базавого.

    1. AUTHENTICATION_BACKENDS = ('django_openidconsumer.exauth.TypedModelBackend',)

    4. В файле settings.py установим имя группы, которое будет определять, что пользователь авторизируется через OpenID. OPENID_GROUP = ‘openid_auth’;
    5. Делаем инсерт в таблицу групп . По умолчанию у нее значение auth_group.

    1. INSERT INTO auth_group(name) VALUES (‘openid_auth’);

    6. В урлсы проекта urls.py прописываем урл, с которого будет проходить авторизация.

    1. (r'^openid/',include('openidconsumer.urls'),{'on_success':vm.init_openid}),

    Параметром on_success – мы указываем какая функция будет вызвана в случае удачной авторизации.
    7. Пишем обработчик этой функции:

    1. from openidconsumer import exauth
    2. from django.http import HttpResponseRedirect
    3.  
    4. def init_openid(request,identity_url, openid_response,*args,**kwargs):
    5.     if exauth.openid_login_first(request,identity_url, openid_response):
    6.         return HttpResponseRedirect('/edit_profile/');
    7.     return HttpResponseRedirect('/');

    тут все просто – либо идет редирект на /edit_profile/, в случае если пользователь зашел под своим OpenID url впервые , либо перебрасываем на главную

    Если вы обратили внимание, то я убрал мидвере класс из предыдущего описания. В принципе там была передача в объект реквеста параметра OpenID. Я же ее добавил в объект юзера.

    В принципе в зависимости от предыдущего описание модуля для работы с OpenID. Добавился файл exauth.py в котором и происходит расширение возможностей базавой авторизации и добавлены некоторые полезные функции.

    Share and Enjoy:
    • Facebook
    • LinkedIn
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]

    Tags: , ,

  • 28Sep

    С начало небольшая цитата из вики:

    OpenID — это открытая децентрализованная система единого входа, которая позволяет использовать один логин и пароль на большом количестве сайтов.”

    Кроме того, пока я гуглил на эту тему, то наткнулся на примечательную статейку, даже немного в тему.

    1. <link rel="openid.server" href="http://openid.yandex.ru/server.xml" />
    2. <link rel="openid.delegate" href="http://openid.yandex.ru/users/your_user_name" />

    Если у вас есть экаунт на яндексе, то вставив этот код в хеад вашего блога, то можно в виде опенайди урла указывать ваш блог. Но это уже отклонение от темы.

    В нете есть уже решение этой темы. Так и называется django-openid, разработка Simon Willison, сделан на базе python-openid. Но в виду того, что и Django уже не тот, и python-openid двигается, у меня все падало – ввиду не правильного использования функций в самом джанговском модуле. Итого результат можно видеть уже тут.

    Также я ещё создал отдельный файл урлов, так что использование сводится к следующему:

    1. Как это не банально – скачиваем и распаковываем архивчик в папки с питоном или в папке вашего джанго проекта.
    2. В INSTALLED_APPS добавляем django_openidconsumer и запускаем: python manage.py syncdb
    3. В MIDDLEWARE_CLASSES добавляем django_openidconsumer.middleware.OpenIDMiddleware.
    4. в urlconf добавляем

    1. (r'^openid/',include('django_openidconsumer.urls'))

    Теперь, о том, какие данные мы можем получить.
    1. OpenID URL авторизованного пользователя лежит в str(request.openid)
    2. Если вы хотите определить дополнительные действия для случая, когда пользователь успешно авторизовался либо не успешно, то можете передать его так:

    1. (r'^openid/',include('django_openidconsumer.urls'),{'on_success':mysuccess_function,'on_failure':myfailure_function}),

    3. OpenID паровайдер может возвратить дополнительные ключи, называемые simple registration, полусить к ним доступ можно через ключи хеша: request.openid.sreg. Но я тестил только на Яндексе, и у меня ничего пока не получалось
    4. Если вам необходимо изменить сами страницы, а вам надо будет их изменить, то вам необходимо создать а корне папке с темплейтами следующие файлы: openid_signin.html и openid_failure.html. Примеры можете найти в папке templates архива.

    Далее будет рассказано, как это можно удобно связать с базовой авторизацией Джанго… Не переключайте…

    Share and Enjoy:
    • Facebook
    • LinkedIn
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]

    Tags: , ,

   

Recent Posts

Recent Comments

  • Я просто оставлю это тут: ...
  • спасибо...
  • Если вдуматься в каждое слово, то время беСконечно в русском...
  • Спасибо, Евгений, исправленно.P.S.: перехал на диску...
  • за опечатку - спасибо...