python-social-auth no obtiene los detalles correctos de Google OAuth2
Quiero iniciar sesión en un usuario usando elpython-social-auth
funcionalidad para el inicio de sesión de Google Plus en Django. Al iniciar sesión desde mi sitio web, todo funciona bien y los detalles correctos se agregan a la base de datos.
Sin embargo, también quiero autenticarme desde mi aplicación de Android. El usuario inicia sesión en la aplicación, que luego envía el token de acceso a la API de django, que maneja el proceso de inicio de sesión en el siguiente código, adaptado dela documentación:
@csrf_exempt
@serengeti_api_request
@psa('social:complete')
def login_social_token(request, backend):
# Ensure the token has been specified.
token = request.META.get('HTTP_ACCESSTOKEN')
if token is None:
raise SerengetiApiRequestException('Access token is missing!')
# Login the user for this session
user = request.backend.do_auth(token)
if user is None:
raise SerengetiApiRequestException('Could not authenticate user!')
login(request, user)
# Store the email address if one has been specified (e.g. Twitter)
email = request.META.get('HTTP_EMAIL')
if email is not None:
user.email = email
user.save()
# Prepare the parameters to be returned
response = dict({
'id': user.id,
'first_name': user.first_name,
'last_name': user.last_name,
'api_key': request.session.session_key,
})
# Return a 200 status code to signal success.
return HttpResponse(json.dumps(response, indent=4), status=200)
Al iniciar sesión desde el sitio web, elsocial_auth_usersocialauth
la tabla contiene:
id | provider | uid | extra_data
==========================================
10 | google-oauth2 | <myemail> | {"token_type": "Bearer", "access_token": "<token>", "expires": 3600}
Sin embargo, al iniciar sesión desde la aplicación utilizando la función anterior, la operación se completa correctamente, pero la entrada en la tabla se ve así:
id | provider | uid | extra_data
=========================================
10 | google-oauth2 | <empty> | {"access_token": "", "expires": null}
También elauth_user
la tabla contiene unusername
me gustaeeed494412obfuscated48bc47dd9b
en lugar del nombre de usuario de Google Plus y elemail
El campo está vacío.
¿Qué estoy haciendo mal y cómo puedo obtener la misma funcionalidad que obtengo en el sitio web?
Me gustaría mencionar que implementé la autenticación de Facebook y Twitter desde la aplicación de Android, que llama a la función mencionada anteriormente y almacena los detalles correctos, solo Google Plus está causando problemas.