2

我有一个需要用户对象的端点方法。我会做以下事情吗?这似乎有点奇怪,因为我可以让用户使用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对象的原因是因为我必须使用用户电子邮件来查询和查找该用户的朋友。

4

2 回答 2

3

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

要实际获取当前用户,您将调用endpoints.get_current_user(); 这将需要在装饰器或方法中添加allowed_client_ids和/或。有关更多信息,请参阅文档audiences@endpoints.method@endpoints.api

例如,在 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
于 2013-03-20T16:47:25.970 回答
0

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

用户实例也可以从电子邮件地址构造:

from google.appengine.api import users

user = users.User("A***.j***@gmail.com")
于 2013-03-20T06:50:26.200 回答