在烧瓶中的一个应用程序中处理两种不同类型的用户会话的正确方法

Proper way to handle two different types of user session in one app in flask

我正在构建的 Flask 应用程序分为 2 个蓝图部分。每个部分都应该有自己的完全独立的身份验证系统(自己的登录页面,每个身份验证都有自己的限制访问区域,...)

但正如我在 this Post 中担心和陈述的那样,Flask-Login 模块只能注册到应用程序而不是蓝图,因此整个应用程序只有一种类型的会话。

那么初始化与另一种完全不同的第二种登录会话的正确方法是什么。

我认为您不需要按照您描述的方式进行操作。

可以创建两个不同的User模型,然后您可以更改哪个模型在不同的路由中进行身份验证:

@auth_blueprint.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():

        user = User.query.filter_by(username=form.username.data).first()

        if user is not None and user.verify_password(form.password.data):
            login_user(user, True)
            next = request.args.get('next')
            #if not next_is_valid('next'):
            #    return abort(400)

            return redirect(next or url_for('simple.index'))
        flash('Invalid username or password')

    return render_template('/auth/login.html', form=form)

当您调用login_user()时,您可以传入您需要的任何用户模型。这会将数据库对象附加到 Flask-Login 的 current_user ,它可以在模板和视图函数中使用。使用此方法,您可以保留单独的用户 table,并且仅在路由中使用的特定 table 中的登录用户。

实际上,您可能只想使用一个 User 模型,但将不同的角色分配给不同的用户,并且只允许具有特定角色的用户访问站点的特定部分。

看看这个非常简单的装饰器,您可以使用它来将特定视图限制为特定角色:

http://flask.pocoo.org/snippets/98/