阻止用户编辑其他用户的个人资料

时间:2017-06-22 10:47:58

标签: python flask

我创建了一个允许用户编辑其个人资料的功能,如下所示:

@count.route('/employees/edit/<int:id>', methods=['GET', 'POST'])
@login_required
def edit_employee(id):
    """
    Edit a employee
    """

    add_employee = False

    employee = Employee.query.get_or_404(id)
    form = EmployeeForm(obj=employee)
    if form.validate_on_submit():
        employee.name = form.name.data
        employee.description = form.description.data
    return render_template('admin/employees/employee.html', 
    add_employee=add_employee, form=form, title="Edit Employee")

但问题是,当用户更改url中的id随机时,它有可能更改另一个用户的配置文件。 我正在寻找使用令牌的解决方案,但我还没有成功。

2 个答案:

答案 0 :(得分:0)

一个简单的解决方案是使用Sessions,以便您知道当前登录用户的身份。然后比较并查看当前登录用户是否正在尝试编辑自己的配置文件,如果没有重定向或向他们显示错误消息

答案 1 :(得分:0)

Flask-Login提供名为current_user的代理,它代表当前登录的用户。您可以使用它来确保用户只能编辑自己的个人资料。如果用户想要编辑其他用户的个人资料,您可以将用户重定向到索引页。

from flask_login import current_user
# ...
def edit()
    # ...
    employee = Employee.query.get_or_404(id)
    if employee != current_user:
        flash('You can't edit other user's profile.')
        return redirect(url_for('.index'))
相关问题