Python Oauth2 - faça o login com o Google

Eu tenho procurado por 2 dias para uma resposta, mas nada apareceu.

Estou tentando integrar o Oauth2 para fazer login com o Google no Django. O código que eu lance uma exceção - "O token é inválido".

Isto acontece:

<code>resp, content = client.request(access_token_url, "POST")
    if resp['status'] != '200':
        print content
        raise Exception("Invalid response from Google."+content)
</code>

em google_authenticate ()

Por favor me ajude.

Meu código:

<code>    def google_login(request):
    scope = "https://www.googleapis.com/auth/userinfo.profile"

    request_token_url = "https://www.google.com/accounts/OAuthGetRequestToken?scope=%s" % scope
    authorize_url = 'https://www.google.com/accounts/OAuthAuthorizeToken'
    authenticate_url = "https://accounts.google.com/o/oauth2/auth"

    response_type = "code"
    redirect_uri = "http://127.0.0.1:8000/login/google/auth"
    scope = "https://www.googleapis.com/auth/userinfo.profile"

    oauth_key = settings.GOOGLE_KEY
    oauth_secret = settings.GOOGLE_SECRET

    consumer = oauth.Consumer(oauth_key, oauth_secret)
    client = oauth.Client(consumer)

    # Step 1: Get a request token. This is a temporary token that is used for 
    # having the user authorize an access token and to sign the request to obtain 
    # said access token.

    resp, content = client.request(request_token_url, "POST")
    request_token = dict(urlparse.parse_qsl(content))

    if resp['status'] != '200':
        raise Exception("Invalid response from Google.")

    # Step 2. Store the request token in a session for later use.
    request.session['request_token'] = dict(cgi.parse_qsl(content))

    # Step 3. Redirect the user to the authentication URL.
    url = "%s?oauth_token=%s&client_id=%s&response_type=%s&redirect_uri=%s&scope=%s" % (authenticate_url,
        request.session['request_token']['oauth_token'],
        oauth_key,response_type,redirect_uri,scope)

    return HttpResponseRedirect(url)

def google_authenticate(request):
    access_token_url = 'https://www.google.com/accounts/OAuthGetAccessToken'

    oauth_key = settings.GOOGLE_KEY
    oauth_secret = settings.GOOGLE_SECRET

    consumer = oauth.Consumer(oauth_key, oauth_secret)

    # Step 1. Use the request token in the session to build a new client.
    token = oauth.Token(request.session['request_token']['oauth_token'],
        request.session['request_token']['oauth_token_secret'])
    if 'oauth_verifier' in request.GET:
        token.set_verifier(request.GET['oauth_verifier'])
    client = oauth.Client(consumer, token)

    # Step 2. Request the authorized access token from Google.
    resp, content = client.request(access_token_url, "POST")
    if resp['status'] != '200':
        print content
        raise Exception("Invalid response from Google."+content)

    access_token = dict(cgi.parse_qsl(content))

    # Step 3. Lookup the user or create them if they don't exist.
    try:
        user = User.objects.get(username=access_token['screen_name'])
    except User.DoesNotExist:
        # When creating the user I just use their [email protected]
        # for their email and the oauth_token_secret for their password.
        # These two things will likely never be used. Alternatively, you 
        # can prompt them for their email here. Either way, the password 
        # should never be used.
        user = User.objects.create_user(access_token['screen_name'],
            '%[email protected]' % access_token['screen_name'],
            access_token['oauth_token_secret'])

        # Save our permanent token and secret for later.
        profile = Profile()
        profile.user = user
        profile.oauth_token = access_token['oauth_token']
        profile.oauth_secret = access_token['oauth_token_secret']
        profile.save()

    # Authenticate the user and log them in using Django's pre-built 
    # functions for these things.
    user = authenticate(username=access_token['screen_name'],
        password=access_token['oauth_token_secret'])
    login(request, user)

    return HttpResponseRedirect('/')
</code>

questionAnswers(1)

yourAnswerToTheQuestion