如何使用flask登录将登录限制为单个用户?

如何使用flask登录将登录限制为单个用户?,flask,flask-sqlalchemy,flask-wtforms,flask-login,Flask,Flask Sqlalchemy,Flask Wtforms,Flask Login,我对Flask应用程序开发还不熟悉。目前,我在Flask服务器上部署了一个ML应用程序 现在,任何人都可以注册并登录来运行ML推理。但我希望活动用户成为单个用户。这意味着,如果任何用户在部署的站点中处于活动状态,则其他用户都无法登录该站点 以下是一些相关代码: from flask_login import ( LoginManager, UserMixin, login_user, login_required, logout_user, cur

我对Flask应用程序开发还不熟悉。目前,我在Flask服务器上部署了一个ML应用程序

现在,任何人都可以注册并登录来运行ML推理。但我希望活动用户成为单个用户。这意味着,如果任何用户在部署的站点中处于活动状态,则其他用户都无法登录该站点

以下是一些相关代码:

from flask_login import (
    LoginManager,
    UserMixin,
    login_user,
    login_required,
    logout_user,
    current_user,
)

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(50), unique=True)
    email = db.Column(db.String(50), unique=True)
    password = db.Column(db.String(80))


@login_manager.user_loader
def load_user(user_id):
    return User.query.get(int(user_id))


class LoginForm(FlaskForm):
    username = StringField(
        "Username", validators=[InputRequired(), Length(min=4, max=50)]
    )
    password = PasswordField(
        "Password", validators=[InputRequired(), Length(min=8, max=80)]
    )
    remember = BooleanField("Remember me")


@app.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:
            if check_password_hash(user.password, form.password.data):
                login_user(user, remember=form.remember.data)
                return redirect(url_for("index"))

        return redirect(url_for("error", code="500.3"))

    return render_template("login.html", form=form)


有人对我如何实现我的想法有什么建议吗?如果有人知道内置功能可能会有所帮助,我将使用
Flask登录。

试试Flask limiter,Flask limiter允许您设置页面或IP地址的限制


访问

我不知道任何特定功能,但您可以在
用户
模型中使用布尔值,例如
登录
。然后,每当有人登录时,您都会查询所有用户的登录字段
logged\u in
:如果它等于
None
,则他们可以登录;否则他们就无法进入。这类似于您检查与
LoginForm()
中的用户名匹配的那一行,但您检查的是
logged_in
功能。同意@JakeJackson,但是您需要确保您的注销逻辑是防弹的,以防止锁定。例如,如果用户从未真正单击过注销按钮。是的,你是对的。这基本上是一种比赛状态,如果不适当适应,会有很多问题。