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

Python 在flask中的一个应用程序中处理两种不同类型用户会话的正确方法,python,session,flask,flask-login,blueprint,Python,Session,Flask,Flask Login,Blueprint,我正在构建的flask应用程序分为两个蓝图部分。每个部分都应该有自己的认证系统,完全独立于其他部分(自己的登录页面,每个认证都有自己的受限访问区域,…) 但是,正如我在Flask Login模块中担心并指出的那样,登录只能注册到应用程序,而不能注册到蓝图,因此整个应用程序只有一种会话类型 那么,初始化与另一种完全不同的第二种登录会话的正确方式是什么呢。我认为您不需要按照您描述的方式来进行 您可以创建两个不同的用户模型,然后可以更改在不同路径中获得身份验证的模型: @auth_blueprint.

我正在构建的flask应用程序分为两个蓝图部分。每个部分都应该有自己的认证系统,完全独立于其他部分(自己的登录页面,每个认证都有自己的受限访问区域,…)

但是,正如我在
Flask Login
模块中担心并指出的那样,登录只能注册到应用程序,而不能注册到蓝图,因此整个应用程序只有一种会话类型


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

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

您可以创建两个不同的
用户
模型,然后可以更改在不同路径中获得身份验证的模型:

@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\u user()
时,您可以传入所需的任何用户模型。这将把数据库对象附加到Flask登录名的
当前用户
,该用户可以在模板和视图函数中使用。使用此方法,您可以保留单独的用户表,并且只保留路由中使用的特定表中的登录用户

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

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


我认为你不需要按照你描述的方式来做

您可以创建两个不同的
用户
模型,然后可以更改在不同路径中获得身份验证的模型:

@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\u user()
时,您可以传入所需的任何用户模型。这将把数据库对象附加到Flask登录名的
当前用户
,该用户可以在模板和视图函数中使用。使用此方法,您可以保留单独的用户表,并且只保留路由中使用的特定表中的登录用户

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

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


谢谢,我会试试。谢谢,我会试试。解决方案可以在这里找到:解决方案可以在这里找到: