google oauth如何从step2网址获取“代码”

时间:2013-07-07 21:56:20

标签: python django api oauth

我正在尝试使用Google OAuth进行身份验证,但在完成本教程后遇到了一些麻烦。

这是我目前的设置:

    FLOW = OAuth2WebServerFlow(
        client_id='67490467925.apps.googleusercontent.com',
        client_secret='K1tkrPK97B2W16ZGY',
        scope='https://www.googleapis.com/auth/calendar',
        user_agent='Real_Hub/1.0',
        redirect_uri='http://127.0.0.1:8000/',)


    storage = Storage('calendar.dat')
    credentials = storage.get()
    if credentials is None or credentials.invalid == True:
        auth_uri = FLOW.step1_get_authorize_url()
        return auth_uri
    else:
        http = httplib2.Http()
        http = credentials.authorize(http)

        service = build(serviceName='calendar', version='v3', http=http,
                        developerKey='AIzaSyCBGjIQ2uNbThW_2oMO9P-Ufb8kc')

        return service
        #End OAUTH...

我不确定应该将credentials = flow.step2_exchange(code)storage.put(credentials)放在哪里以及如何获取“代码”变量?在API中,它来自重定向网址。但我不遵循如何做到这一点。

1 个答案:

答案 0 :(得分:1)

您需要定义一个处理来自OAuth提供程序的回调的方法,然后将该回调方法映射到应用程序的URL,例如

  http://yourserver/auth_callback

然后在创建Flow类时将redirect_uri设置为auth_callback url

  FLOW = OAuth2WebServerFlow(
    client_id='67490467925.apps.googleusercontent.com',
    ...
    redirect_uri='http://yourserver/auth_callback')

获得auth_uri后,您需要将用户重定向到该uri,以便他们进行身份验证/授权

  self.redirect(auth_uri, ...)

经过身份验证/授权后,OAuth提供商会“回复”您之前指定的redirect_uri。在您的回调处理程序方法中,您现在将解析code或如果它不存在,请检查error参数

  code = self.request.get("code")
  credentials = FLOW.step2_exchange(code)

注意:我没有对此进行测试,并且我在一段时间内没有使用过python,因此语法可能会关闭,但希望您能得到一般的想法。