Найти - Пользователи
Полная версия: Ошибки в Django OpenID
Начало » Django » Ошибки в Django OpenID
1
Naota
Поставил djopenid из примеров python-openid. Даю в consumer ссылку http://openidenabled.com/python-openid/trunk/examples/server/user/ и он мне показывает экранированную форму. Делаю повторный запрос и consumer перенаправляет на openidenabled.com.Там предлагается подтвердить, жму Yes(Allow) идет перенаправление и consumer мне сообщает: OpenID authentication failed. Invalid openid.mode: u'i'. Копался в исходниках но не понял суть проблемы. Подскажите пожалуйста решение.

OpenID сервер у меня локальный и нет возможности протестировать на внешних сайтах с поддержкой openid аутентификации. По этому поставил реализацию в Django(аутентификация на openidenabled.com проходит успешно). И здесь openid сервер пишит непонятную ошибку: Invalid OpenID Namespace u'h'. Я в затруднение. То ли ошибка в клиенте, то ли в сервере. Как это определить?
Naota
Если вдруг поможет. Привожу ответы от моего и от openidenabled.com серверов. Здесь он должен спрашивать доверия сайта, с которого пришел запрос.

Ответ от моего сервера с ошибкой:
/endpoint/?
openid.identity=http%3A%2F%2Flocalhost%3A6666%2Fserver%2Fuser%2F&
openid.mode=checkid_setup&
openid.return_to=http%3A%2F%2Flocalhost%3A8000%2Faccount%2Fsignin%2Fcomplete%2F%3Fnext%3D%252Faccount%252F%26janrain_nonce%3D2009-08-06T15%253A32%253A50ZrW9GfK%26openid1_claimed_id%3Dhttp%253A%252F%252Flocalhost%253A6666%252Fserver%252Fuser%252F&
openid.sreg.optional=nickname%2Cemail&
openid.trust_root=http%3A%2F%2Flocalhost%3A8000%2F
Положительный ответ от openidenabled.com сервера
/endpoint/?
openid.assoc_handle=%7BHMAC-SHA1%7D%7B4a7ac33c%7D%7BfNYBuQ%3D%3D%7D&
openid.claimed_id=http%3A%2F%2Fopenidenabled.com%2Fpython-openid%2Ftrunk%2Fexamples%2Fserver%2Fuser%2F&
openid.identity=http%3A%2F%2Fopenidenabled.com%2Fpython-openid%2Ftrunk%2Fexamples%2Fserver%2Fuser%2F&
openid.mode=checkid_setup&
openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&
openid.ns.sreg=http%3A%2F%2Fopenid.net%2Fextensions%2Fsreg%2F1.1&
openid.realm=http%3A%2F%2Flocalhost%3A8000%2F&
openid.return_to=http%3A%2F%2Flocalhost%3A8000%2Faccount%2Fsignin%2Fcomplete%2F%3Fnext%3D%252Faccount%252F%26janrain_nonce%3D2009-08-06T15%253A35%253A07ZoJ4I9s&
openid.sreg.optional=nickname%2Cemail
Naota
Основательно порылся в коде клиента и сервера. И нашел Функцию normalDict из djopenid.util.py(OpenID сервер).
Выглядит она так:
def normalDict(request_data):
"""
Converts a django request MutliValueDict (e.g., request.GET,
request.POST) into a standard python dict whose values are the
first value from each of the MultiValueDict's value lists. This
avoids the OpenID library's refusal to deal with dicts whose
values are lists, because in OpenID, each key in the query arg set
can have at most one value.
"""
return dict((k, v[0]) for k, v in request_data.iteritems())
Смысл этой операции я не понял и решил вернуть словарь с полными значениями. После этого мой сервер благополучно предложил подтвердить регистрацию, но при этом написал:
This request claims to be from http://localhost:8000/ but I have determined that it is a pack of lies. Beware, if you release information to them, they are likely to do unconscionable things with it, being the lying liars that they are.

Please tell the real http://localhost:8000/ that someone is trying to abuse your trust in their good name.

В английском я не силен, не очень понятно что он сказал.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB