【问题标题】:how can I make specefic routes accessible only for specefic users in flask?如何使特定路线仅对烧瓶中的特定用户可访问?
【发布时间】:2021-06-03 01:44:50
【问题描述】:

我正在使用 Flask 和 mongodb,我有一个用户表,其中有一个布尔属性 is_admin,我想让特定的视图和路由仅供管理员用户访问,我已经阅读了 Flask -admin 和 Flask-Principal 但它们对我来说似乎很复杂,因为我是初学者而且它只是一个学校项目,有没有办法在不使用 Flask-Principle 的情况下实现这一目标? 例如,我只希望管理员访问此路由

@users.route('/add', methods=['GET', 'POST'])
@login_required
def add():
    form = UserForm(request.form)
    if request.method == 'POST':
        if form.validate():
            user = User(username=form.username.data, password= generate_password_hash(form.password.data), vorname=form.vorname.data, nachname=form.nachname.data, geburtsdatum=form.geburtsdatum.data, email=form.email.data, admin=form.admin.data, aktiv=form.aktiv.data)
            user.save()
            flash("user added successfully.", "success")
            return redirect(url_for('.index'))
    return render_template('form.html', users=users, form=form, info=session)

【问题讨论】:

  • 可能想查看 flask_login,然后使用 current_user 检查该布尔值

标签: flask


【解决方案1】:

如果我正确理解您的问题,您可能正在寻找类似的内容:

from flask_login import current_user
# use the suggested pattern to login user then..

@users.route('/add', methods=['GET', 'POST'])
@login_required
def add():
    if not current_user.is_admin:
        abort(403)
    # rest of your route

这将返回 HTTP 403 - Forbidden
根据*:

HTTP 403 是一个 HTTP 状态代码,表示禁止访问所请求的资源。服务器理解请求,但不会满足它。

【讨论】:

    最近更新 更多