我创建了一个允许用户编辑其个人资料的功能,如下所示:
@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随机时,它有可能更改另一个用户的配置文件。 我正在寻找使用令牌的解决方案,但我还没有成功。
答案 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'))