我一直在尋找我的Symfony2驗證選項。問題是這樣的:你應該如何驗證密碼設置者的輸入?
我有一個會員類散列在setPassword方法密碼:
public function setPassword($password)
{
$this->password = Encrypt::cryptPassword($password);
}
哈希無論是原始輸入的存在很長的字符串。
爲此驗證這樣是沒用的:因爲不管輸入的有效性的創建哈希串
* @Assert\NotBlank()
* @Assert\Length(
* min = "8",
* max = "15",
* minMessage = "Your password must be at least {{ limit }} characters",
* maxMessage = "Your password cannot be longer than {{ limit }} characters"
*)
驗證被觸發。
我看着嘗試getter驗證,但這也似乎是一個死衚衕,因爲再一次,我真正想要驗證的是setPassword()的原始輸入並在setPassword創建散列後獲取散列值價值是沒有幫助的。
對此的推薦方法是否與現有的驗證組件一起使用,這將允許我驗證原始用戶輸入?
更新
雖然我接受了答案,它是不是真的可行。它確實導致 me專注於生命週期回調系統,這可能是解決方案的一部分。
鑑於目前的建議,一旦密碼編碼的第一 時間,超過驗證,任何時候你嘗試,因爲散列密碼當然不是輸入,不能 解密成原來的輸入編輯實體 。
我現在在實體單獨的屬性與使用驗證組 的實驗,純粹 輸入密碼的進入,沿觸發使用在某些情況下的驗證(新用戶創建 /密碼改變),而在其他情況下省略它。我做了 計劃利用prePersist和preUpdate回調來執行密碼的 編碼。
只是爲了記錄,這是在一個應用程序, 提供了一個REST API,以及管理工具和網站前端 結束選定的功能。
Sybio是正確的,你應該使用Symfony2的安全組件。它是高度可配置的,並允許您定義自己的密碼編碼器,在保存用戶時調用它。因此,在驗證過程中,您將擁有普通密碼(Symfony不會存儲在會話中),並且可以在沒有問題的情況下使用斷言。 – flu
@Sybio:這看起來很有希望,會給它一個旋轉,並跟進。 – gview
這不是一個真正可行的答案,因爲不幸的是,一旦密碼被編碼,之後就會超過驗證。我現在正在試驗一個純粹用於輸入密碼的實體中的單獨屬性。 – gview