РЕДАКТИРОВАТЬ: читайте дальше о двух решениях.
Я развернул приложение Flask в AWS ElasticBeanstalk.Приложение не может прочитать заголовок ' Authorization ' в запросах.
Отчеты журнала ошибок:
KeyError: 'HTTP_AUTHORIZATION'
Ошибка, связанная с:
@application.before_request
def before_request():
try:
token = request.headers['Authorization'].split(' ')[-1]
user = User.get(token=token)
g.user = user
except ValueError as e:
abort(401)
Каталог приложения:
app/
.elasticbeanstalk
application.py
virt
.ebignore
requirements.txt
Конфигурация среды устанавливает WSGIPath на application.py :
aws:elasticbeanstalk:container:python:
NumProcesses: '1'
NumThreads: '15'
StaticFiles: /static/=static/
WSGIPath: application.py
Среда запускает Python 3.6 иследующие компоненты:
Click==7.0
Flask==1.0.2
Flask-RESTful==0.3.7
itsdangerous==1.1.0
Jinja2==2.10
MarkupSafe==1.1.1
peewee==3.9.2
psycopg2==2.7.7
python-dotenv==0.10.1
pytz==2018.9
six==1.12.0
Werkzeug==0.14.1
Требуется ли что-нибудь еще?
Попытка (неудачное) решение:
Я много часов сожгла на этом,и попытался настроить WSGIPassAuthorization , (в соответствии с рекомендациями здесь и в других местах), однако мне это не удалось.
Каталог приложения, содержащий обходной путь:
app/
.elasticbeanstalk
.ebextensions/
wsgi_custom.config
application.py
virt
.ebignore
requirements.txt
Когда я пытаюсь создать среду eb, содержащую .ebextensions / wsgi_custom.config , интерфейс командной строки EB сообщает об ошибке, говоря, что YAML недействителен:
ERROR: InvalidParameterValueError - The configuration file .ebextensions/wsgi_custom.config in application version app-190310_100513 contains invalid YAML or JSON. YAML exception: Invalid Yaml: while scanning a simple key
in "<reader>", line 7, column 5:
WSGIPassAuthorization On
^
could not found expected ':'
in "<reader>", line 7, column 29:
On
^
, JSON exception: Invalid JSON: Unexpected character (f) at position 0.. Update the configuration file.
Содержание .ebextensions / wsgi_custom.config :
files:
"/etc/httpd/conf.d/wsgi_custom.conf":
mode: "000644"
owner: root
group: root
content: |
WSGIPassAuthorization On
Мой инструмент проверки YAML сообщает о действительном YAML.
Примечание. Редактор настроен на использование пробелов в соответствии с AWS YAML рекомендациями.
РЕДАКТИРОВАТЬ: РЕШЕНИЕ 1
РешеноОшибки проверки YAML в приведенном выше примере.Я считаю, что ошибки проверки были красной селедкой.Файл .conf, упомянутый в сценарии, теперь имеет правильное имя.
Содержимое файла .ebextensions / wsgi_custom.config:
files:
"/etc/httpd/conf.d/wsgihacks.conf":
mode: "000644"
owner: root
group: root
content: |
WSGIPassAuthorization On
РЕДАКТИРОВАТЬ: РЕШЕНИЕ 2 с использованием container_commands
Установить WSGIPassAuthorization на ElasticBeanstalk с помощью container_commands .
Шаг 1. Создать .ebextensions / wsgi_custom.config:
app/
.elasticbeanstalk
.ebextensions/
wsgi_custom.config
application.py
virt
.ebignore
requirements.txt
wsgi_custom.config :
container_commands:
01wsgipass:
command: 'echo "WSGIPassAuthorization On" >> ../wsgi.conf'
Шаг 2. Перезапустить Среда EB.
Приложение Flask теперь может читать заголовок ' Authorization ' в запросах.
Ура :)) 1100 *
Если кто-нибудь может указать мне на ясное обсуждение WSGI это будет оценено.