Flask's abort
поступает непосредственно из Werkzeug.Это вызываемый объект, который вызывает различные предопределенные исключения HTTP (подклассы HTTPException
) по требованию.Проверьте код здесь для получения подробной информации.
Предопределенный Unauthorized
(который сопоставлен с 401) определяет только код и сообщение, но не заголовок WWW-Authenticate
, который какВы знаете, что необходимо вызвать всплывающее окно входа в браузерах.Заголовки HTTPException
жестко закодированы как [('Content-Type', 'text/html')]
в HTTPException.get_headers
.
Таким образом, чтобы добавить заголовок WWW-Authenticate
, создайте собственный подкласс Unauthorized
, перезапишите функцию get_headers
и, наконец, обновитеabort.mapping
словарь с ним.
from flask import abort
from werkzeug.exceptions import Unauthorized
class MyUnauthorized(Unauthorized):
description = '<Why access is denied string goes here...>'
def get_headers(self, environ):
"""Get a list of headers."""
return [('Content-Type', 'text/html'),
('WWW-Authenticate', 'Basic realm="Login required"')]
abort.mapping.update({401: MyUnauthorized})
Теперь все abort(401)
вызовы вызовут ваше пользовательское исключение.