在Google云端点项目(Python)中使用其他Google API

时间:2015-01-27 04:53:49

标签: python google-app-engine google-maps-api-3 google-cloud-endpoints google-contacts

我正在使用Python中的Google Cloud Backends Project支持Android应用。我希望服务器能够在用户的帐户上进行一些API调用 (比如联系人,地图等)而不是让Android客户端承担这个开销。 我根本不使用Webapp 。我不愿意 - 我不认为有必要,除非这是使这项工作的唯一方法。

想知道我将如何前进:

@endpoints.api(name='data_api',
           version='v1',
           description='Access, create or delete data for meetups.',
           audiences=client_ids.allowed_client_ids,
           scopes=[  # Get email and Details
                     endpoints.EMAIL_SCOPE,
                     # Get Contacts
                     client_ids.CONTACTS_SCOPE
           ])
class DataApi(remote.Service):
@UserModel.method(name='user.fetch',
                  user_required=True)
def get_all_contacts(self, query):
    #Now what?

我想我需要将Auth令牌转发到服务器到Google API的另一个自定义请求,但我不知道如何提取它并推进它。无法在文档或此处的任何问题中找到它。

感谢您的帮助。

编辑: 我确实知道如何检查用户是否经过身份验证,但这并不能告诉我如何使用相同的身份验证令牌来启动Google API。

if endpoints.get_current_user() is not None:
    #Do secret authenticated business...

1 个答案:

答案 0 :(得分:1)

OAuth2流程的最后一步,检索到的令牌位于API请求标头中。我们可以这样访问它:

import os
self.bearer = os.getenv('HTTP_AUTHORIZATION')

这提供了可以中继到其他API的承载字符串。使用正确的范围,当使用atom和gdata Python库完成时,我们需要在这里找到一个新对象:https://github.com/ca9/meetup-backend/blob/master/atom/auth.py

在EndpointsAuth类中

与gdata一起使用如下:

if e_user:
        gd_client = gdata.contacts.client.ContactsClient(source='<var>intense-terra-821</var>', auth_token=EndpointsAuth())

在任何端点函数下。