Форум сайта python.su
Поставил 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'. Я в затруднение. То ли ошибка в клиенте, то ли в сервере. Как это определить?
Офлайн
Если вдруг поможет. Привожу ответы от моего и от 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
/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
Офлайн
Основательно порылся в коде клиента и сервера. И нашел Функцию 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())
Офлайн