Как правильно обрабатывать исключения python-social-auth при использовании Flask?

Я добавляю PSU в приложение Flask, и пока все идет хорошо, но я не могу понять, как обрабатывать исключения, вызванные PSU. Одним из таких исключений является social.exceptions.AuthCanceled, возникающее, когда пользователь решает отменить процесс аутентификации. Я, очевидно, хотел бы поймать это и отобразить какое-то сообщение.

Я нашел похожий вопрос о том, как это сделать в Django, создав новое промежуточное ПО. Однако этот подход, похоже, использует middleware.py, определенный только в django_app PSU (а не в flask_app).

У меня есть некоторый опыт работы с Flask, но раньше я не добавлял промежуточное ПО, и я не уверен, что это правильное направление.


person Andrei O    schedule 23.02.2014    source источник


Ответы (1)


ОБНОВЛЕНИЕ

Попробуйте определить errorhandler (документы по адресу http://flask.pocoo.org/docs/api/#flask.Flask.errorhandler), например:

@app.errorhandler(500)  # since exceptions will produce 500 errors
def error_handler(error):
    if isinstance(error, SocialAuthBaseException):
        return redirect('/error')

Решение под этой строкой не работает


Попробуйте использовать teardown_request (http://flask.pocoo.org/docs/reqcontext/#teardown-callbacks), вот так

@app.teardown_request
def teardown_handler(exception=None):
    if exception and isinstance(exception, SocialAuthBaseException):
        return redirect('/error')
person omab    schedule 24.02.2014
comment
Спасибо за ваш ответ! Я пробовал, он попадает внутрь if, но, похоже, игнорирует return. По-видимому, teardown_request функциям не разрешено изменять запрос, а возвращаемые ими значения игнорируются (flask.pocoo.org/docs/api/#flask.Flask.teardown_request). - person Andrei O; 25.02.2014
comment
Обновленный подход работает как шарм. Для других, реализующих это, не забудьте установить DEBUG = False и TEST = False в своей конфигурации, чтобы проверить это, в противном случае отображается исключение, а обработчик ошибок никогда не вызывается. Также обратите внимание, что вы не можете flash в обработчике ошибок, но вы, конечно, можете перенаправить на страницу, которая это делает. - person Andrei O; 01.03.2014
comment
Я добавил раздел об этом в документы psa.matiasaguirre.net /документы/конфигурация/ - person omab; 01.03.2014
comment
Звучит хорошо, спасибо за внимание и за очень полезное приложение! - person Andrei O; 03.03.2014