1. HappyClover

    07.09.2009

    0 ↑
    0 ↓
    Делаю регистрацию пользователей по протоколу ОпенАйДи как описывается в этой статье http://habrahabr.ru/blogs/webdev/67774/ (через кнопку выбора провайдера). И столкнулся с тем, что от Google приходит email, а от Яндекс и Рамблер нет ни nickname и email.

    Подскажите, в какую строну мне копать, что бы получать от всех трех провайдеров nickname и email? В django-authopenid есть бага или у всех работает, а я что-то неправильно настроил?
  2. Alexander Koval

    07.09.2009

    0 ↑
    0 ↓
    У Яндекса можно достать nickname через vcard. Я написал такую функцию:
    def get_hcard_data(identity_url, search=('email', 'nickname', 'fn')):
    """
    Try to get hcard data from given identity_url.
    Returns dict:
    {'email':'mail@example.org', 'nickname':'user_nickname', 'fn':'user_fullname'}
    """
    hcard_data = {}
    for s in search: hcard_data.update({s:''})

    try:
    import re
    from urllib2 import urlopen, URLError
    from BeautifulSoup import BeautifulSoup

    u = urlopen(identity_url)
    soup = BeautifulSoup(u.read())
    vcard_block = soup.find(True, {'class':re.compile(r'\bvcard\b')})
    if not vcard_block:
    return hcard_data
    for s in search:
    s_block = vcard_block.findChild(True, {'class':re.compile(r'\b%s\b' % s)})
    if s_block:
    hcard_data.update( {s: ''.join(s_block.findAll(text=True))} )
    except (ImportError, ValueError, URLError, UnicodeEncodeError), e:
    pass
    except:
    if settings.DEBUG:
    raise

    return hcard_data
    Яндекс отдает дополнительные данные о пользователе через sreg, но только если сам пользователь у себя на странице поставил нужные галочки.
  3. django_authopenid некорректно определял наличие расширения sreg - он требовал, чтоб это расширение было перечислено в XRDF-документе (по стандартам это не обязательно), а у яндекса оно там было не перечислено.

    Может в этом причина.

    По идее, сейчас все должно работать - у яндекса sreg в XRDF появился (спасибо Ивану Сагалаеву), да и в django_authopenid баг http://bitbucket.org/benoitc/django-authopenid/issue/35/sreg-discovery-is-incorrect закрыт уже.

  4. HappyClover

    08.09.2009

    0 ↑
    0 ↓
    Обновил django-authopenid, через Яндекс получаю nickname, но нет почты. А через google наоборот :( А от Рамблера по прежнему ничего нет.
  5. Как минимум django-authopenid + openid.yandex.ru + получение почтового адреса - должно работать, у меня работает нормально, по крайней мере. Может быть, дело и правда в том, что написал Alexander Koval:

    Яндекс отдает дополнительные данные о пользователе через sreg, но только если сам пользователь у себя на странице поставил нужные галочки.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.