flask-admin 保护整个管理站点,而不仅仅是索引视图
flask-admin secure the whole admin site but not just the index view
我可以通过拥有自己的 CustomeIndexView 来保护索引视图,并检查是否在那里进行了身份验证。但这不会保护模型视图,例如,URL /admin/MyModel/ 仍然不安全。有没有办法保护整个网站,基本上任何 url 像 /admin/xxx/?
一种方法是在 ModelView
中自定义 is_accessible
。但我仍然觉得如果可以通过限制 root 访问来完成它会更直接 url
顺便说一下,我正在使用 flask-login
您可以使用 before_request
检查是否 current_user.is_authenticated
和 return 401 响应,如果没有,如:
@app.before_request
def before_request():
if request.full_path.startswith('/admin/'):
if not current_user.is_authenticated:
abort(401, 'Please log in')
例如,您也可以使用它重定向到登录页面。
您可以继承自 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))
我可以通过拥有自己的 CustomeIndexView 来保护索引视图,并检查是否在那里进行了身份验证。但这不会保护模型视图,例如,URL /admin/MyModel/ 仍然不安全。有没有办法保护整个网站,基本上任何 url 像 /admin/xxx/?
一种方法是在 ModelView
中自定义 is_accessible
。但我仍然觉得如果可以通过限制 root 访问来完成它会更直接 url
顺便说一下,我正在使用 flask-login
您可以使用 before_request
检查是否 current_user.is_authenticated
和 return 401 响应,如果没有,如:
@app.before_request
def before_request():
if request.full_path.startswith('/admin/'):
if not current_user.is_authenticated:
abort(401, 'Please log in')
例如,您也可以使用它重定向到登录页面。
您可以继承自 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))