获取用户对象的app-engine端点方法

时间:2013-03-20 04:49:59

标签: google-app-engine python-2.7 google-cloud-datastore google-cloud-endpoints user-object

我有一个需要用户对象的端点方法。我会做以下吗?这似乎有点奇怪,因为我可以让用户使用endpoints.get_current_user()

@endpoints.method(FriendListRequest, FriendListResponse,
                  path='scores', http_method='POST',
                  name='scores.list')
def friend_list(self, request):
  # work would go here

然后FriendListRequest将是

class FriendListRequest(messages.Message):
    user_object = messages.Field(1, required=True)

我需要User对象的原因是因为我必须使用用户电子邮件来查询和查找所述用户的朋友。

2 个答案:

答案 0 :(得分:3)

为了安全地对用户进行身份验证,Cloud Endpoints提供了简单的OAuth 2.0支持。请求消息可以是VoidMessage,而不是将请求消息传递给用户对象(不安全),您可以依赖Authorization标头,该标头包含用户的OAuth 2.0令牌。

要真正获得当前用户,您需要拨打endpoints.get_current_user();这需要在allowed_client_ids装饰器或audiences方法中添加@endpoints.method和/或@endpoints.api。有关详细信息,请参阅docs

例如,在API上:

@endpoints.api(name='myapi', ...,
               allowed_client_ids=[MY_CLIENT_ID])
class MyApi(...):

    @endpoints.method(message_types.VoidMessage, FriendListResponse,
                      path='scores', http_method='POST',
                      name='scores.list')
    def friend_list(self, request):
        user = endpoints.get_current_user()
        # work would go here

或者,方法:

    @endpoints.method(message_types.VoidMessage, FriendListResponse,
                      path='scores', http_method='POST',
                      name='scores.list',
                      allowed_client_ids=[MY_CLIENT_ID])
    def friend_list(self, request):
        user = endpoints.get_current_user()
        # work would go here

答案 1 :(得分:0)

使用用户创建用户对象并传递相同的

用户实例也可以通过电子邮件地址构建:

from google.appengine.api import users

user = users.User("A***.j***@gmail.com")