2013-08-16 21 views
0

我正在使用CakePHP來處理我的應用程序,我有一個用戶模型。這個用戶有一個密碼,它有一個正則表達式來驗證。 正則表達式強制用戶使用至少6個字符長的密碼,至少包含1個數字和特殊字符。CakePHP編輯用戶給出validationErrror

驗證看起來是這樣的:

'password' => array(
    'ruleName' => array(
    'rule' => array('custom', '/^.*(?=.{6,})(?=.*\d)(?=.*[a-zA-Z])(?=.*[@#$%^&+=]).*$/i'), 
      'message' => 'Password not legit', 
      'allowEmpty' => true 
    ) 
) 

當我想修改自己的密碼,這個驗證的偉大工程。但是,當我想編輯用戶(沒有選項來更改密碼)時,$ this-> User-> save()失敗。

如果調試我的$這個 - >用戶 - > validationErrors,顯示的唯一的事情是:

array(
    'password' => '*****' 
) 

密碼字段未在我的帖子的數據集,因此在驗證時應該根本不會發生。 當我評論這塊驗證碼時,用戶可以被保存。

有人知道我在做什麼錯嗎?

+0

如果您不提供特殊處理,請勿在編輯中包含密碼字段。提示:http://www.dereuromark.de/2011/08/25/working-with-passwords-in-cakephp/ – mark

+0

@mark我沒有在編輯時加入密碼。實際上,我還在控制器中添加了這段代碼,如果它已設置,則將其從發佈數據中提取出來:if(empty($ this-> request-> data ['User'] ['password'])){未設置(這 - $>請求 - >數據[ '用戶'] [ '密碼']); } – harmjanr

回答

0

我已經自己解決了。在保存User對象之前,我已經爲其他目的做了$ this-> User-> Read(null,$ userid)。

這導致記住$ this-> User對象中的讀取值(包括密碼)。

由於在$ this-> User對象上調用save方法,因此密碼值也試圖保存。但由於** *根據正則表達式無效,保存失敗。

感謝您的幫助!

+0

是的,永遠不要使用read(),總是find()。 – mark