0

applyFilter()パスワードについて助けが必要です。新しいレコードを作成する (つまり、保存する) と、フィルターは正常に機能します。

しかし、パスワードを更新するときにパスワードも暗号化するようにフィルターを変更するにはどうすればよいですか。

これが私の保存フィルターです。

Users::applyFilter('save', function($self, $params, $chain) {
    if ($params['data']) {
        $params['entity']->set($params['data']);
        $params['data'] = array();
    }
    if (!$params['entity']->exists()) {
        $params['entity']->password = Password::hash($params['entity']->password);
    }
    return $chain->next($self, $params, $chain);
});

ありがとう

4

1 に答える 1

1

パスワードが変更された場合にのみ、パスワードをハッシュする必要があります。エンティティ オブジェクトでは、エンティティの元のデータを取得し、更新されているかどうかを確認できます。同様に、パスワード フィールドが空の場合、パスワードをハッシュしたくありません。

あなたがこのようなことをしていると仮定します:

$user = Users::first($id);
if (!empty($this->request->data) && !empty($user)) {
    if ($user->save($this->request->data)) {
        // woohoo
    } else {
        // bummer
    }
}

次に、次のコードが機能するはずです。

Users::applyFilter('save', function($self, $params, $chain) {
    if ($params['data']) {
        $params['entity']->set($params['data']);
        $params['data'] = array();
    }
    $entity = $params['entity'];
    if ($entity->password) {
        $export = $entity->export();
        if (empty($export['data']['password']) || $export['data']['password'] != $entity->password) {
            $entity->password = Password::hash($entity->password);
        }
    }
    return $chain->next($self, $params, $chain);
});
于 2011-10-30T04:15:40.637 に答える