在App Engine项目上实现OAUTH2

时间:2014-08-21 16:51:08

标签: django google-app-engine oauth-2.0 oauth2client

我尝试将OAUTH2功能添加到我现有的App Engine应用程序中,但遇到了一些问题,我很感激任何建议。

以下是我的步骤: 1.在Google Api控制台中创建客户端ID,并创建OAUTH流程; 2.用户访问login页面后,系统会将其重定向到Google登录页面; 3.一旦他们同意这些条款,用户将被重定向到我的应用程序的登录页面

from oauth2client.client import OAuth2WebServerFlow
from django.http import HttpResponseRedirect

flow = OAuth2WebServerFlow(client_id='my_client_id',
                           client_secret='my_client_secret',
                           scope='https://www.googleapis.com/auth/userinfo.email',
                           redirect_uri='http://www.example.com/')

def login(request):
    return HttpResponseRedirect(auth_uri)

def ecoLandingPage(request):
    code=request.GET.get('code', '')
    if code:
        cred = "" + code
        credentials = flow.step2_exchange(cred)

我的问题是:

  1. 用户登录并重定向到目标网页后,如果他刷新页面,则会出现以下错误,我猜这与flow.step2_exchange(cred)有关。有办法解决这个问题吗?

    INFO 2014-08-21 16:39:55,837 client.py:1304]无法检索访问令牌:{

    “错误”:“invalid_grant”,

    “error_description”:“代码无效。”

    }

  2. 此外,由于我在App Engine上运行Django项目,检查当前用户信息的最佳方法是什么,因为我想在页面的右上角发布他们的名字。有什么好的例子吗?

  3. 谢谢!

1 个答案:

答案 0 :(得分:1)

OAuth可以成为一个可以管理的野兽。我个人做他们做的事here并使用装饰者类。这样它将涵盖刷新和许多其他出现的野兽。

获取用户信息user class以获取用户信息。您可以通过他们的Tutorial查看它。您不必担心用户.create_login_url'因为theOAuth需要登录。