gpt4 book ai didi

python - Flask 安全未授权回调

转载 作者:行者123 更新时间:2023-11-28 17:29:14 26 4
gpt4 key购买 nike

我正在使用 Flask-Security 扩展,但我终其一生都无法弄清楚在扩展初始化时我可以在扩展中的哪个位置传入未经授权的处理程序。这对我很重要,因为我不想在用户没有所需权限时将他们重定向到另一个端点。我希望他们在他们所在的 url 中看到它,因此他们保留他们无权访问的 url 的上下文。我的解决方法是在第一个请求进入之前将方法修补到扩展上:

@app.before_first_request
def monkey_patch():
"""Monkey patching the flasksecurity callback"""
current_app.extensions['security']._unauthorized_callback=lambda: abort(401)

然后我使用我的 app.errorhandler 来处理错误并返回适当的响应代码。

@app.errorhandler(401)
def unauthorized(e):
return 'You not authorized to visit this page', 401

有谁知道更好的方法吗?

最佳答案

我有同样的问题 - 我希望我的应用程序返回 JSON 对象,而不是在用户尝试访问限制区域时重定向到 login 页面。看起来 Flask-Security 没有提供开箱即用的这种功能。幸运的是,它重用了 Flask-Login 并将其作为 Flask 应用程序的成员公开。

这就是它的工作原理。现在,一旦用户尝试访问使用 login_required 装饰器保护的 API 端点,它就会返回 JSON 对象。

@app.login_manager.unauthorized_handler
def unauth_handler():
return jsonify(success=False,
data={'login_required': True},
message='Authorize please to access this page'), 401

希望对您有所帮助!

更新:我更新了一些功能,使其更加通用。如果传递的请求是 AJAX,则它使用 JSON 对象进行响应,否则使用呈现的页面进行响应。

@app.login_manager.unauthorized_handler
def unauth_handler():
if request.is_xhr:
return jsonify(success=False,
data={'login_required': True},
message='Authorize please to access this page.'), 401
else:
return render_template('errors/401.html'), 401

关于python - Flask 安全未授权回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35780562/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com