2 回答

TA貢獻1890條經驗 獲得超9個贊
簡短回答:您正在使用新密碼作為舊密碼的哈希值。
說明:
我猜您將表單綁定到了您的用戶類。 表單中的 password
字段已映射,這意味著它會更新您的用戶財產。password
因此,由于該屬性應包含“舊密碼”的哈希但包含您的新密碼,無法驗證。
解決方案和改進:
最快的解決方案是 “取消映射” password
字段或刪除 data_class
表單選項,并替換控制器中的一行:
// before: $newPassword = $user->getPassword(); $newPassword = $form->get('password')->getData();
我建議:
取消表單與您的用戶類的綁定
對您的字段使用UserPassword驗證約束
oldPassword
使用
$form->getData()
獲取表單數據,而不是手動訪問$request

TA貢獻1946條經驗 獲得超4個贊
您將更改您的表單,因為如果您保留字段密碼,則用戶的密碼也會被表單更改,所以正確的方法是:
- 在您的表格中:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('oldPassword', PasswordType::class, [
'mapped' => false,])
->add('newPassword',PasswordType::class, [
'mapped' => false,])
;
}
然后在你的控制器中更改獲取新密碼的方式
$oldPassword = $request->request->get('reset_pass')['oldPassword'];
$newPassword = $request->request->get('reset_pass')['newPassword'];
玩得開心 :)
- 2 回答
- 0 關注
- 221 瀏覽
添加回答
舉報