【问题标题】: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))