0

User モデルがあるアプリケーションに CakePHP を使用しています。このユーザーには、検証する正規表現を持つパスワードがあります。正規表現は、少なくとも 1 つの数字と特殊文字を含む、少なくとも 6 文字の長さのパスワードを使用することをユーザーに強制します。

検証は次のようになります。

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

パスワードを編集したい場合、この検証はうまく機能します。しかし、ユーザーを編集したい場合 (パスワードを変更するオプションはありません)、$this->User->save() は失敗します。

$this->User->validationErrors をデバッグすると、表示されるのは次の 1 つだけです。

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

投稿データにパスワード フィールドが設定されていないため、検証はまったく行われません。この検証コードのブロックにコメントを付けると、ユーザーを救うことができます。

誰が私が間違っているのか知っていますか?

4

1 に答える 1

0

私はすでにそれを自分で解決しました。User オブジェクトを保存する前に、他の目的で $this->User->Read(null, $userid) を実行しました。

これにより、読み取り値 (パスワードを含む) が $this->User オブジェクトに記憶されていました。

$this->User オブジェクトで save メソッドが呼び出されるため、パスワード値も保存されようとしています。しかし ** *は正規表現によれば有効ではないため、保存は失敗します。

とにかく助けてくれてありがとう!

于 2013-08-16T12:38:31.980 に答える