Приводя Google App Engine inter module communication authorization проблемы у меня есть, что в Docs (communication between modules) говорит:Google App Engine авторизация между модулем связи (питон)
Вы можете настроить любой ручной или базовый модуль масштабирования принимать запросов от других модулей в вашем app, ограничив его обработчик , разрешите только учетные записи администратора, указав логин: admin для соответствующего обработчика в файле конфигурации модуля. С этим ограничением любой URLFetch из любого другого модуля в приложении будет автоматически аутентифицирован App Engine, и любой запрос , который не является приложением, будет отклонен.
И это именно та конфигурация у меня есть для моего модуля называется «api1». В моем файле app.yaml у меня есть:
# can accept requests from other modules.
# with login: admin and they are authenticated automatically.
- url: /.*
script: _go_app
login: admin
Я пытаюсь сейчас, из другого модуля в том же самом приложении, чтобы сделать вызов службы, как предложено в документе с использованием urfetch.fetch() метод, и моя реализация:
from google.appengine.api import urlfetch, modules, app_identity
from rest_framework.response import Response, status
@api_view(['POST'])
def validate_email(request):
url = "http://%s/" % modules.get_hostname(module="api1")
payload = json.dumps({"SOME_KEY":"SOME_VALUE"})
appid = app_identity.get_application_id()
result = urlfetch.fetch(url + "emails/validate/document",
follow_redirects=False,
method=urlfetch.POST,
payload=payload,
headers={"Content-Type":"application/json")
return Response({
'status_code': result.status_code,
'content': result.content
}, status=status.HTTP_200_OK)
Согласно документации, указав follow_redirects = False, выборки() будет автоматически вставлять заголовок в моем вызове (я е ven попытался добавить его явно) с помощью «X-Appengine-Inbound-Appid»: MY-APP-ID. К сожалению, я получаю результат вызова перенаправления 302, если я его следую, это перенаправление на форму аутентификации. Это происходит на сервере разработки, а также в Production.
Не могли бы вы рассказать мне, как я могу позвонить в службу api1 внутри своего метода validate_email (принадлежащего другому модулю в том же приложении)? Есть ли другой способ аутентификации вызова, так как кажется, что предложенная внутри документации не работает?
Спасибо