Pregunta

Estoy tratando de utilizar Django-socialauth ( http://github.com/uswaretech/Django- Socialauth) para la autenticación de usuarios para mi proyecto Django.

Este es el tiempo abetos trabajar con OpenID y he tenido que averiguar cómo exactamente funciona este Open ID. Tengo más o menos entendido que, a estas alturas, pero hay algunas cosas que me eluden.

El proceso de autenticación comienza cuando la solicitud se junta en en django-socialauth.openid_consumer.views.begin. Puedo ver que la solicitud de autenticación saliente es más o menos algo así:

https://www.google.com/accounts/o8/ud?openid.assoc_handle=AOQobUckRThPUj3K1byG280Aze-dnfc9Iu6AEYaBwvHE11G0zy8kY8GZ&
openid.ax.if_available=fname&
openid.ax.mode=fetch_request&
openid.ax.required=email&
openid.ax.type.email=http://axschema.org/contact/email&
openid.ax.type.fname=http://example.com/schema/fullname&
openid.claimed_id=http://specs.openid.net/auth/2.0/identifier_select&
openid.identity=http://specs.openid.net/auth/2.0/identifier_select&
openid.mode=checkid_setup&openid.ns=http://specs.openid.net/auth/2.0&
openid.ns.ax=http://openid.net/srv/ax/1.0&
openid.ns.sreg=http://openid.net/extensions/sreg/1.1&
openid.realm=http://localhost/&
openid.return_to=http://localhost/social/gmail_login/complete/?janrain_nonce=2010-03-20T11%3A19%3A44ZPZCjNc&openid.sreg.optional=postcode,country,nickname,email

Esto es mucho como segundo ejemplo aquí: http://code.google.com/apis/accounts/docs/ OpenID.html # muestras

El problema es, que la solicitud, vuelva, no es nada como el ejemplo correspondiente de code.google.com (ver el ejemplo en la tercera ejemplo respuestas Respuesta dict que consigo es la siguiente:.

{
'openid.op_endpoint': 'https://www.google.com/accounts/o8/ud', 
'openid.sig': 'QWMa4x4ruMUvSCfLwKV6CZRuo0E=', 
'openid.ext1.type.email': 'http://axschema.org/contact/email', 
'openid.return_to': 'http://localhost/social/gmail_login/complete/?janrain_nonce=2010-03-20T17%3A54%3A06ZHV4cqh', 
'janrain_nonce': '2010-03-20T17:54:06ZHV4cqh', 
'openid.response_nonce': '2010-03-20T17:54:06ZdC5mMu9M_6O4pw', 
'openid.claimed_id': 'https://www.google.com/accounts/o8/id?id=AItOghawkFz0aNzk91vaQWhD-DxRJo6sS09RwM3SE', 
'openid.mode': 'id_res', 
'openid.ns.ext1': 'http://openid.net/srv/ax/1.0', 
'openid.signed': 'op_endpoint,claimed_id,identity,return_to,response_nonce,assoc_handle,ns.ext1,ext1.mode,ext1.type.email,ext1.value.email', 
'openid.ext1.value.email': 'my.emailaddress@gmail.com', 
'openid.assoc_handle': 'AOQobUfssTJ2IxRlxrIvU4Xg8HHQKKTEuqwGxvwwuPR5rNvag0elGlYL',
'openid.ns': 'http://specs.openid.net/auth/2.0', 
'openid.identity': 'https://www.google.com/accounts/o8/id?id=AItOawkghgfhf1FkvaQWhD-DxRJo6sS09RwMKjASE', 
'openid.ext1.mode': 'fetch_response'}

El socialauth sí ha sido construido para aceptar mi dirección de correo electrónico de esta manera:

    elif request.openid and request.openid.ax:
        email = request.openid.ax.get('email')

Y, obviamente, esto no funciona.

¿Por qué estoy pidiendo todo esto es, que tal vez estoy haciendo algo mal y mi solicitud de salida que está mal? O estoy haciendo todo correctamente y que debería cambiar el módulo socialaouth para aceptar información de una manera nueva y luego confirmar el cambio?

Alan

¿Fue útil?

Solución

Trate de usar el atributo URI completa en su ax.get, es decir ax.get('http://axschema.org/contact/email')

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top