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 объекта, потому что я должен использовать электронную почту пользователя для запроса и найти друзей указанного пользователя.

+0

Вам необходимо пройти защищенный маркер (например, в OAuth2), а не объект пользователя, в противном случае кто-нибудь может претендовать на то, что он может быть кем угодно. –

+0

Использование 'messages.Field' для хранения объекта пользователя не удастся. – bossylobster

ответ

0

Создайте объект пользователя с помощью пользователей и передать тот же

Экземпляр Пользователь также может быть построен с адреса электронной почты: поддержка

from google.appengine.api import users 

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

Это неверно для облачных конечных точек. – bossylobster

3

Для безопасной аутентификации пользователя, Cloud Endpoints обеспечивает простой OAuth 2.0 , Вместо передачи пользовательского объекта (небезопасного) с запросом сообщение запроса может быть VoidMessage, и вы можете положиться на заголовок авторизации, который содержит токен 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

Это потребует добавления 'allowed_client_ids' и/или аудиторий в декоре' @ endpoints.method' или методе '@ endpoints.api'. Дополнительную информацию см. В [docs] (https://developers.google.com/appengine/docs/python/endpoints/create_api#allowed-clients-and-audiences). – bossylobster

+0

Прохладный! Я посмотрю на документы, @bossylobster – learner

+1

Не возражаете, если я обновлю свой ответ, чтобы включить эту информацию? – bossylobster

Смежные вопросы