python-openid не предоставляет атрибуты ax или sreg
Я наконец смог получить python-openid для аутентификации пользователя, но я не смог создать sreg.SRegResponse или ax.FetchResponse, поскольку они возвращаются как None. Это из аккаунта Служб Google, и я пытаюсь следовать примеру с https://github.com/openid/python-openid/tree/master/examples/djopenid. Я слышал, что система OpenID от Google может быть немного странной и требует некоторых настроек, таких как получение атрибутов OpenID AX от Google / Yahoo в Rails
response = c.complete(request_args, return_to)
sreg_response = sreg.SRegResponse.fromSuccessResponse(response)
ax_response = ax.FetchResponse.fromSuccessResponse(response)
Ответ определенно возвращается как УСПЕХ, но я вижу следующее сообщение об ошибке, которое может быть связано:
Generated checkid_setup request to https://www.google.com/accounts/o8/ud with assocication AOQobUdVBCrd-GZRcasn9tD-yOUF0Y8pJLAQrYXODqLxUUjN62G1BXR1
Error attempting to use stored discovery information: <openid.consumer.consumer.TypeURIMismatch: Required type http://specs.openid.net/auth/2.0/signon not found in ['http://specs.openid.net/auth/2.0/server', 'http://openid.net/srv/ax/1.0', 'http://specs.openid.net/extensions/ui/1.0/mode/popup', 'http://specs.openid.net/extensions/ui/1.0/icon', 'http://specs.openid.net/extensions/pape/1.0'] for endpoint <openid.consumer.discover.OpenIDServiceEndpoint server_url='https://www.google.com/accounts/o8/ud' claimed_id=None local_id=None canonicalID=None used_yadis=True >>
Attempting discovery to verify endpoint
Performing discovery on https://www.google.com/accounts/o8/id?id=AItOawkKU4uzJV9Q_FGMECNGsbiXG2caISYMyCw
Received id_res response from https://www.google.com/accounts/o8/ud using association AOQobUdVBCrd-GZRcasn9tD-yOUF0Y8pJLAQrYXODqLxUUjN62G1BXR1
Вот мои настройки.
sreg_request = sreg.SRegRequest(optional=['email', 'nickname'],
required=['dob'])
auth_request.addExtension(sreg_request)
# Add Attribute Exchange request information.
ax_request = ax.FetchRequest()
# XXX - uses myOpenID-compatible schema values, which are
# not those listed at axschema.org.
ax_request.add(ax.AttrInfo('http://schema.openid.net/namePerson',
required=True))
ax_request.add(ax.AttrInfo('http://schema.openid.net/contact/web/default',
required=False, count=ax.UNLIMITED_VALUES))
auth_request.addExtension(ax_request)
1 ответ
У меня были проблемы с возвратом Google не schema.openid.net
значения для AttributeExchange. Он возвращал None, как вы упомянули, и хуже всего то, что он работал, когда я впервые написал свои обработчики OpenID.
Как только я переключился на значения axschema в моей реализации, это работало как очарование. например:
URLS = {
'ax_email': 'http://axschema.org/contact/email',
'ax_first': 'http://axschema.org/namePerson/first',
}
...
ax_request = ax.FetchRequest()
ax_request.add(ax.AttrInfo(URLS['ax_email'], required = True))
ax_request.add(ax.AttrInfo(URLS['ax_first'], required = True))
auth_request.addExtension(ax_request)