【问题标题】:flask-admin secure the whole admin site but not just the index viewflask-admin 保护整个管理站点,而不仅仅是索引视图
【发布时间】:2026-01-19 09:45:02
【问题描述】:

我可以通过拥有自己的 CustomeIndexView 来保护索引视图,并检查是否在那里进行了身份验证。但这不会保护模型视图,例如,URL /admin/MyModel/ 仍然不安全。有没有办法保护整个网站,基本上是像 /admin/xxx/ 这样的任何 url?

一种方法是在ModelView 中自定义is_accessible。但是我仍然觉得如果可以通过限制根 url 的访问来完成它会更直接

顺便说一句,我正在使用烧瓶登录

【问题讨论】:

    标签: flask flask-login flask-admin


    【解决方案1】:

    您可以使用before_request 来检查是否为current_user.is_authenticated,如果不是则返回401 响应,如:

    @app.before_request
    def before_request():
        if request.full_path.startswith('/admin/'):
            if not current_user.is_authenticated:
                abort(401, 'Please log in')
    

    例如,您也可以使用它来重定向到登录页面。

    【讨论】:

    • 谢谢!我觉得这是最好的方法
    【解决方案2】:

    你可以从ModelView继承:

    class LoginRequiredView(ModelView):
    
        def is_accessible(self):
            return current_user.is_authenticated
    
        def inaccessible_callback(self, name, **kwargs):
            return redirect(url_for('admin.login', next=request.url))
    

    然后使用此视图而不是 ModelView 添加您的模型:

    admin.add_view(LoginRequiredView(User, db.session))
    

    【讨论】:

      最近更新 更多