-
Делаю регистрацию пользователей по протоколу ОпенАйДи как описывается в этой статье http://habrahabr.ru/blogs/webdev/67774/ (через кнопку выбора провайдера). И столкнулся с тем, что от Google приходит email, а от Яндекс и Рамблер нет ни nickname и email.
Подскажите, в какую строну мне копать, что бы получать от всех трех провайдеров nickname и email? В django-authopenid есть бага или у всех работает, а я что-то неправильно настроил? -
У Яндекса можно достать nickname через vcard. Я написал такую функцию:
Яндекс отдает дополнительные данные о пользователе через sreg, но только если сам пользователь у себя на странице поставил нужные галочки.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 -
django_authopenid некорректно определял наличие расширения sreg - он требовал, чтоб это расширение было перечислено в XRDF-документе (по стандартам это не обязательно), а у яндекса оно там было не перечислено.
Может в этом причина.
По идее, сейчас все должно работать - у яндекса sreg в XRDF появился (спасибо Ивану Сагалаеву), да и в django_authopenid баг http://bitbucket.org/benoitc/django-authopenid/issue/35/sreg-discovery-is-incorrect закрыт уже.
-
Обновил django-authopenid, через Яндекс получаю nickname, но нет почты. А через google наоборот :( А от Рамблера по прежнему ничего нет.
-
Как минимум django-authopenid + openid.yandex.ru + получение почтового адреса - должно работать, у меня работает нормально, по крайней мере. Может быть, дело и правда в том, что написал Alexander Koval:
Яндекс отдает дополнительные данные о пользователе через sreg, но только если сам пользователь у себя на странице поставил нужные галочки.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.


