2017-06-22 109 views
-1

我創建了一個功能,允許用戶以如下編輯他的個人資料:防止用戶編輯其他用戶的個人資料

@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'。並限制您的當前路由僅限管理員。 –

回答

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

一個簡單的解決方案是使用會話,以便知道當前登錄用戶是誰。然後比較並查看當前登錄用戶是否試圖編輯他們自己的配置文件,如果不重定向他們或向他們顯示錯誤消息

相關問題