防止用户编辑其他用户的个人资料
问题描述:
我创建了一个功能,允许用户以如下编辑他的个人资料:防止用户编辑其他用户的个人资料
@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裸随机它具有更改其他用户的个人资料的可能性。 我正在寻找使用令牌的解决方案,但我没有成功地做到这一点。
答
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'))
答
一个简单的解决方案是使用会话,以便知道当前登录用户是谁。然后比较并查看当前登录用户是否试图编辑他们自己的配置文件,如果不重定向他们或向他们显示错误消息
这取决于你在哪里保存当前登录用户的数据创建另一个途径wirthout'','获取从会话或加密的cookie,id'。并限制您的当前路由仅限管理员。 –