tag eyed3 attribute python apache2 flask http-authentication abort

python - eyed3 - title html attribute



Respuesta estándar 401 cuando se usa autenticación HTTP en el matraz (2)

El abort del matraz viene directamente de Werkzeug. Es un objeto invocable, que genera diversas excepciones HTTP predefinidas (subclases de HTTPException ) a pedido. Echa un vistazo al código here para más detalles.

El Unauthorized predefinido (que se asigna a 401) solo define el código y un mensaje, pero no el encabezado WWW-Authenticate , que, como sabe, es necesario para activar la ventana emergente de inicio de sesión con los navegadores. Los encabezados que tiene una HTTPException están codificados como [(''Content-Type'', ''text/html'')] en HTTPException.get_headers .

Entonces, para agregar el encabezado WWW-Authenticate cree su propia subclase Unauthorized , sobrescriba la función get_headers y finalmente actualice el diccionario 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})

Ahora todas las llamadas abort(401) elevarán su excepción personalizada.

En el matraz, estoy usando el siguiente snippet de snippet para habilitar la autenticación HTTP:

def authenticate(): return Response(''<Why access is denied string goes here...>'', 401, {''WWW-Authenticate'':''Basic realm="Login Required"''})

Ahora, en mi experiencia pasada con Flask, si las credenciales de alguien son incorrectas y quiero hacerles saber que puedo llamar:

abort(401)

Esto le da la respuesta básica de apache 401. ¿Alguien sabe cómo puedo implementar eso con el fragmento de arriba?

Gracias


Las respuestas de error personalizadas son realmente fáciles en Flask. Cree una función cuyo único argumento sea el código de estado de error HTTP, haga que devuelva una instancia de flask.Response y @app.errorhandler con @app.errorhandler .

@app.errorhandler(401) def custom_401(error): return Response(''<Why access is denied string goes here...>'', 401, {''WWW-Authenticate'':''Basic realm="Login Required"''})

Luego puede usar abort(401) para el contenido de su corazón.