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.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage