我嘗試了@Assert\MinLength
,但它在編碼密碼時,似乎在每次都足夠長的時間內檢查。如何在編碼之前放置約束?如何在Symfony2中設置密碼長度限制?
我想不出有什麼更好的方法來計算綁定註冊表後strlen
的符號數量,但我認爲這不是一個好方法。而且我也不確定即使這樣做會起作用,但我不確定何時完成編碼。
任何建議將不勝感激!先謝謝你!
我嘗試了@Assert\MinLength
,但它在編碼密碼時,似乎在每次都足夠長的時間內檢查。如何在編碼之前放置約束?如何在Symfony2中設置密碼長度限制?
我想不出有什麼更好的方法來計算綁定註冊表後strlen
的符號數量,但我認爲這不是一個好方法。而且我也不確定即使這樣做會起作用,但我不確定何時完成編碼。
任何建議將不勝感激!先謝謝你!
的問題是,你使用一個字段有兩個目的:採用明文存儲和編碼格式的密碼。你需要的是每個目的的領域:
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\Constraints\MinLength;
use Doctrine\ORM\Mapping\Column;
class User
{
/**
* @NotBlank
* @MinLength(6)
*
* @var string
*/
private $plainPassword;
/**
* @Column
*
* @var string
*/
private $password;
}
只有$password
字段保存到數據庫,它不是在形式顯示,使用戶不能編輯它。
此外,您還需要一個Doctrine事件偵聽器或其他代碼來檢查$plainPassword
是否爲空,如果不是,則將其值編碼爲$password
。
使用security.encoder_factory
服務獲取您在安全配置中設置的編碼器,並使用它編碼密碼。另外,請檢查我的ElnurBlowfishPasswordEncoderBundle。
非常感謝! :) – Faery
您不應該在密碼設置器中自己編碼。而不是使用某種編碼器(甚至可以編寫自己的編碼器),並在驗證表單後對密碼進行編碼。
下面是例如你如何使用編碼器:
http://symfony.com/doc/current/book/security.html#encoding-the-user-s-password
謝謝!我知道'$ this-> password = sha1($ password);'是一個不好的習慣,但這只是對所有安全系統的練習,我也遇到過問題,所以我也不想這麼做複雜。 – Faery
這可能是因爲您在調用isValid()方法之前對密碼進行了編碼。你在哪裏編碼你的密碼? – Cyprian
我用一種方法對它進行編碼:'public function setPassword($ password) { $ this-> password = sha1($ password); }'這是在我的**用戶**類。 – Faery