python-social-auth não está obtendo detalhes corretos do Google OAuth2
Quero fazer login de um usuário usando opython-social-auth
funcionalidade para o login do Google Plus no Django. Ao fazer login no meu site, tudo funciona bem e os detalhes corretos são adicionados ao banco de dados.
No entanto, também quero me autenticar no meu aplicativo Android. O usuário efetua login no aplicativo, que envia o token de acesso à API do django, que lida com o processo de login no código a seguir, adaptado dea documentação:
@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)
Ao fazer login no site, osocial_auth_usersocialauth
tabela contém:
id | provider | uid | extra_data
==========================================
10 | google-oauth2 | <myemail> | {"token_type": "Bearer", "access_token": "<token>", "expires": 3600}
No entanto, ao efetuar login a partir do aplicativo usando a função acima, a operação é concluída ok, mas a entrada na tabela fica assim:
id | provider | uid | extra_data
=========================================
10 | google-oauth2 | <empty> | {"access_token": "", "expires": null}
Também oauth_user
tabela contém umusername
gostareeed494412obfuscated48bc47dd9b
em vez do nome de usuário do Google Plus e doemail
O campo está vazio.
O que estou fazendo de errado e como posso obter a mesma funcionalidade que recebo no site?
Gostaria de mencionar que implementei a autenticação do Facebook e Twitter a partir do aplicativo Android, que chama a função mencionada acima e armazena os detalhes corretos, apenas o Google Plus está causando problemas.