Flask-Principal处理PermissionDenied异常的最佳实践

9
我在编写Flask时还是新手,目前使用flask-principal作为我的授权机制。 当用户尝试访问未获得权限的URL时,flask-principal会引发PermissionDenied异常。

这会导致我的系统抛出500内部服务器错误。

我该如何捕获特定的异常并将用户重定向到警告页面呢? 如果您能分享一个代码示例,那将非常有帮助。

1个回答

18
您可以告诉Flask-Principal您想引发特定的HTTP错误代码:
@app.route('/admin')
@admin_permission.require(http_exception=403)
def admin(request):
    # ...

现在会调用flask.abort()而不是引发PermissionDenied异常。对于403错误代码,您可以注册一个错误处理程序

@app.errorhandler(403)
def page_not_found(e):
    session['redirected_from'] = request.url
    return redirect(url_for('users.login'))

url_for('users.login') 会返回登录页面的路由URL。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接