我在网上看到了很多解决方案,但是所有解决方案都解决了更复杂的应用程序,允许外部用户创建帐户。在我的情况下,唯一的用户将是管理员。如何以有效的方式保护Flask-Admin创建的/ admin路由?
答案 0 :(得分:2)
您可以使用Flask-Login。我通常会添加一个到AdminIndexView类的路由,如果用户还没有登录,它将处理登录。否则,将显示默认管理页面。
var store = new Vuex.Store({
state: {
value: 1,
quote: {
items: [],
something: ''
}
},
mutations: {
ADD (state, item) {
state.quote.items.push(item)
}
}
})
MyAdminView的定义如下所示:
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())
这在Flask-Admin界面中不显眼地集成了Flask-Login。您仍需要执行Flask-Login documentation。
中所述的用户和密码验证修改强>
为防止未经授权访问您的管理路由,请为每个视图创建一个ModelView类,并使用以下代码添加函数is_accessible()
:
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'))