【问题标题】:What is the right way of handling python-social-auth exceptions when using Flask?使用 Flask 时处理 python-social-auth 异常的正确方法是什么?
【发布时间】:2014-03-25 00:01:51
【问题描述】:

我正在将 PSU 添加到 Flask 应用程序中,到目前为止一切进展顺利,但我不知道如何处理 PSU 引发的异常。一个这样的例外是 social.exceptions.AuthCanceled,当用户决定取消身份验证过程时引发。我显然想抓住它并显示一些信息。

我找到了一个similar question,关于如何通过创建一个新的中间件在 Django 中执行此操作。但是,这种方法似乎使用了仅在 PSU 的 django_app(而不是 flask_app)中定义的 middleware.py。

我有一些使用 Flask 的经验,但之前没有添加过中间件,我不确定这是不是正确的方向。

【问题讨论】:

    标签: python flask python-social-auth


    【解决方案1】:

    更新

    尝试定义errorhandlerhttp://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')
    

    【讨论】:

    • 感谢您的回复!我试了一下,它进入了if,但似乎忽略了return。显然teardown_request函数不允许修改请求,它们的返回值被忽略flask.pocoo.org/docs/api/#flask.Flask.teardown_request)。
    • 更新的方法就像一个魅力。对于其他实现此功能的人,不要忘记在您的配置中设置DEBUG = FalseTEST = False 来测试它,否则会显示异常并且永远不会调用错误处理程序。另请注意,您不能在错误处理程序中flash,但您当然可以重定向到可以这样做的页面。
    • 我在文档psa.matiasaguirre.net/docs/configuration/…中添加了一个关于它的部分
    • 听起来不错,感谢您的跟进和非常有用的应用程序!
    猜你喜欢
    • 2013-08-31
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    相关资源
    最近更新 更多