0
我看到過很多這樣的解決方案的網絡,但是所有的人都解決更復雜的應用程序,允許外部用戶創建賬戶。在我的情況下,唯一的用戶將是管理員。如何以有效的方式保護由Flask-Admin創建的管理路線?如果我的唯一用戶將成爲管理員,如何保護Flask-Admin?
我看到過很多這樣的解決方案的網絡,但是所有的人都解決更復雜的應用程序,允許外部用戶創建賬戶。在我的情況下,唯一的用戶將是管理員。如何以有效的方式保護由Flask-Admin創建的管理路線?如果我的唯一用戶將成爲管理員,如何保護Flask-Admin?
您可以使用Flask-Login了點。如果用戶尚未登錄,我通常會向AdminIndexView類添加路由,以處理登錄。否則,將顯示默認管理頁面。
from flask import Flask
from flask_login import LoginManager
from flask_admin import Admin
app = Flask(__name__)
login_manager = LoginManager(app)
login_manager.session_protection = 'strong'
login_manager.login_view = 'admin.login'
admin = Admin(app, index_view=MyIndexView())
MyAdminView的定義可以是這樣的:
from flask_admin import AdminIndexView, expose, helpers
class FlaskyAdminIndexView(AdminIndexView):
@expose('/')
def index(self):
if not login.current_user.is_authenticated:
return redirect(url_for('.login'))
return super(MyAdminIndexView, self).index()
@expose('/login', methods=['GET', 'POST'])
def login(self):
form = LoginForm(request.form)
if helpers.validate_form_on_submit(form):
user = form.get_user()
if user is not None and user.verify_password(form.password.data):
login.login_user(user)
else:
flash('Invalid username or password.')
if login.current_user.is_authenticated:
return redirect(url_for('.index'))
self._template_args['form'] = form
return super(MyAdminIndexView, self).index()
@expose('/logout')
@login_required
def logout(self):
login.logout_user()
return redirect(url_for('.login'))
這在瓶 - 管理界面集成悄悄燒瓶登錄。您仍然需要執行用戶和密碼驗證,如Flask-Login documentation中所述。
編輯
爲了防止您的管理途徑未經授權的訪問創造ModelView類爲每個視圖並添加功能is_accessible()
用下面的代碼:
def is_accessible(self):
if (not login.current_user.is_active or not
login.current_user.is_authenticated):
return False
return True