Skip to content

Not getting correct GoogleOath2 details when signing up by OAuth access token #499

@shnako

Description

@shnako

Full details located on stackoverflow here:

http://stackoverflow.com/questions/28237885/python-social-auth-not-getting-correct-googleoath2-details

I want to login a user using the python-social-auth functionality for Google Plus signin in Django. When logging in from my website, everything works fine and the correct details are added to the database.

However, I want to authenticate from my Android application as well. The user logs in in the application, which then sends the access token to the django API, which handles the login process in the following code, adapted from the documentation:

@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)

When logging in from the website, the social_auth_usersocialauth table contains:

id | provider | uid | extra_data
.....................................................................................
10 | google-oauth2 | | {"token_type": "Bearer", "access_token": "", "expires": 3600}
However, when logging in from the application using the above function, the operation completes ok, but the entry in the table looks like this:

id | provider | uid | extra_data
.....................................................................................
10 | google-oauth2 | | {"access_token": "", "expires": null}
Also, the auth_user table contains a username like eeed494412obfuscated48bc47dd9b instead of the Google Plus username and the email field is empty.

What am I doing wrong and how can I obtain the same functionality as I get on the website?

I would like to mention that I have implemented Facebook and Twitter authentication from the Android application, which call the above-mentioned function and store the correct details, only Google Plus is causing problems.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions