gpt4 book ai didi

python - 在 python 中的 GAE 上使用 OAuth2

转载 作者:太空宇宙 更新时间:2023-11-03 18:11:13 25 4
gpt4 key购买 nike

我正在尝试创建一个 GAE 应用,用户可以在其中访问 appspot 域,使用 OAuth2 获得授权(或不获得授权),然后使用 gdata.spreadsheet 自动修改其 Google 电子表格之一.服务。我已经使用 SignedJwtAssertionCredentials 实现了此功能,但在这种情况下,用户必须明确允许从应用程序进行编辑;我试图跳过此步骤,并让应用程序使用 OAuth2 从用户自己的帐户修改用户的电子表格。

Google 提供的文档表示,装饰器是实现此目的的最简单方法,执行如下操作:

from apiclient.discovery import build
from google.appengine.ext import webapp
from oauth2client.appengine import OAuth2Decorator

decorator = OAuth2Decorator(
client_id='your_client_id',
client_secret='your_client_secret',
scope='https://www.googleapis.com/auth/calendar')

service = build('calendar', 'v3')

...

@decorator.oauth_required
def get(self):
# Get the authorized Http object created by the decorator.
http = decorator.http()
# Call the service using the authorized Http object.
request = service.events().list(calendarId='primary')
response = request.execute(http=http)

但我不知道如何处理这个 service 对象来通过电子表格修改来实现我的目标。有关如何使用 service 对象的任何一般提示或具体提示都会有所帮助。

最佳答案

在提供的示例中,您将使用 Google Calendar API 构建日历服务,该 API 不是基于 GData 的 API。对于基于 GData 的 API,您必须使用 gdata.gauth

请注意,gdata.spreadsheet.service 无法与 gdata.gauth 一起使用,因为它仅支持已弃用的 ClientLogin(请检查 SpreadsheetsService 构造函数)参见[1])。您应该改用gdata.spreadsheets.client

完整的 SpreadsheetsClient 文档位于 [2]。您可以考虑以下示例,其中将工作表添加到电子表格中:

import webapp2
import cgi
import atom.data
import gdata.data
import gdata.spreadsheets.client

from oauth2client.client import OAuth2WebServerFlow

SCOPE = 'https://spreadsheets.google.com/feeds'

flow = OAuth2WebServerFlow(
client_id='your_client_id',
client_secret='your_client_secret',
scope=SCOPE,
redirect_uri='https://your_app.appspot.com/oauth2callback',
response_type='code')


class OAuthCalback(webapp2.RequestHandler):
def get(self):
# Get auth code
auth_code = cgi.escape(self.request.get('code'))

# Exchange auth code for credentials
credentials = flow.step2_exchange(auth_code)

# Get token from credentials
auth2token = gdata.gauth.OAuth2Token(client_id=credentials.client_id,
client_secret=credentials.client_secret,
scope=SCOPE,
access_token=credentials.access_token,
refresh_token=credentials.refresh_token,
user_agent='AppEngine-Google;(+http://code.google.com/appengine; appid: your_app_id)')

# Construct client
spreadsheets_client = gdata.spreadsheets.client.SpreadsheetsClient(source='https://your_app.appspot.com', auth_token=auth2token)

# Authorize it
auth2token.authorize(spreadsheets_client)

# Spreadsheet key
key = 'your_spreadsheet_key'

# Add worksheet to the spreadsheet
entry = spreadsheets_client.add_worksheet(key, 'test', 7, 10)


class MainHandler(webapp2.RequestHandler):
def get(self):
# Get url to start authorization
auth_url = flow.step1_get_authorize_url()

# Render link
content = '<a style="display:inline" href="' + auth_url + ' "target="_blank">Authorize</a>'
self.response.out.write(content)


app = webapp2.WSGIApplication([('/', MainHandler),
('/oauth2callback', OAuthCalback),
], debug=True)

关于 OAuth,我会使用 OAuth2WebServerFlow(有关更多信息,请参阅 [3])。凭证对象可以使用 pickle 进行序列化和反序列化。 [4] 中描述了存储凭证对象的更简单方法。

[1] - https://code.google.com/p/gdata-python-client/source/browse/src/gdata/spreadsheet/service.py?r=f7a9cb244df430d960f6187ee0fbf85fe0218aac
[2] - https://gdata-python-client.googlecode.com/hg/pydocs/gdata.spreadsheets.client.html#SpreadsheetsClient
[3] - https://developers.google.com/api-client-library/python/guide/aaa_oauth#OAuth2WebServerFlow
[4] - https://developers.google.com/api-client-library/python/guide/google_app_engine#Credentials

关于python - 在 python 中的 GAE 上使用 OAuth2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25897189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com