python-social-auth wird nicht korrekt Google OAuth2 Details
Ich möchte einen Benutzer mit dem @ anmeldpython-social-auth
-Funktionalität für die Google Plus-Anmeldung in Django. Wenn ich mich von meiner Website aus anmelde, funktioniert alles einwandfrei und die korrekten Details werden der Datenbank hinzugefügt.
Ich möchte mich jedoch auch über meine Android-Anwendung authentifizieren. Der Benutzer meldet sich in der Anwendung an, die dann das Zugriffstoken an die django-API sendet, die den Anmeldevorgang im folgenden Code abwickelt, angepasst vondie Dokumentatio:
@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)
Wenn Sie sich von der Website anmelden, wird dassocial_auth_usersocialauth
Tabelle enthält:
id | provider | uid | extra_data
==========================================
10 | google-oauth2 | <myemail> | {"token_type": "Bearer", "access_token": "<token>", "expires": 3600}
Wenn Sie sich jedoch mit der obigen Funktion von der Anwendung aus anmelden, wird der Vorgang ordnungsgemäß abgeschlossen, aber der Eintrag in der Tabelle sieht folgendermaßen aus:
id | provider | uid | extra_data
=========================================
10 | google-oauth2 | <empty> | {"access_token": "", "expires": null}
Auch dieauth_user
Tabelle enthält einusername
mögeneeed494412obfuscated48bc47dd9b
anstelle des Google Plus-Nutzernamens und desemail
Feld ist leer.
Was mache ich falsch und wie erhalte ich die gleiche Funktionalität wie auf der Website?
Ich möchte erwähnen, dass ich die Facebook- und Twitter-Authentifizierung über die Android-Anwendung implementiert habe, die die oben genannte Funktion aufruft und die korrekten Details speichert. Nur Google Plus verursacht Probleme.