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

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

问题描述:

我创建了一个功能,允许用户以如下编辑他的个人资料:防止用户编辑其他用户的个人资料

@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") 

但问题是,当用户更改ID在URL裸随机它具有更改其他用户的个人资料的可能性。 我正在寻找使用令牌的解决方案,但我没有成功地做到这一点。

+0

这取决于你在哪里保存当前登录用户的数据创建另一个途径wirthout' ','获取从会话或加密的cookie,id'。并限制您的当前路由仅限管理员。 –

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')) 

一个简单的解决方案是使用会话,以便知道当前登录用户是谁。然后比较并查看当前登录用户是否试图编辑他们自己的配置文件,如果不重定向他们或向他们显示错误消息