2017-04-13 1 views
0

私はYii2で簡単なプロジェクトを作成しようとしています。今私はユーザー機能を作成しています。私は既にGiiでUserモデルとCRUDを作成しました。新しいユーザーを作成したり、編集したりすると、パスワードはプレーンテキストでパスワードを保存します。私はこの機能を無効にして、パスワードをmd5形式で保存する機能を持っています。yii2オーバーライドモデルメソッド

Zend Frameworkでは、同様の機能がありました。 パスワードフィールドがあり、デフォルトのパスワード設定を変更したいときは、モデルでsetPasswordメソッドを作成しました。 Yii2の正しい方法は?

私のUser.phpモデルクラスでは、setPassword($ password)メソッドを作成しましたが、実行されません(var_dumpを内部に入れてチェックします)。

+0

[高度なプロジェクトテンプレート](https://github.com/yiisoft/yii2-app-advanced/blob/master/common/models/User.php)でこれがどのように行われているかを確認してください。 – Bizley

+0

私はそれが動作する方法を理解したい、私はそれを行う必要はありません、ただ理解する – vitasya

答えて

0

beforeSaveメソッドsee hereを実装し、パスワードを暗号化することができます。

$model->save()を呼び出す前に、actionCreateメソッドのコントローラーでこれを行うこともできます。 Advanced Project Templateに基づいて

1

  1. モデルSignupFormが新しいUserモデルを作成するためのresposibleです。
  2. このプロセスを実行するコントローラは、アクションSignupを持つSiteControllerです。SignupFormが適切な場合は、load()のメソッドsignup()がSignupFormから呼び出されます。
  3. データがproperly validatedの場合、ユーザークラスの新しいインスタンスが初期化されます。
  4. 新しいパスワードは、$user->setPassword($this->password);を呼び出して設定します。は、ユーザーが選択した生のプレーンテキストのパスワードです。
  5. メソッドsetPassword()password_hash平文パスワードに基づいて生成された(ハッシュ化され、ソルトされた)プロパティを設定します。このハッシュされたパスワードはデータベースに格納されます。
  6. パスワードをハッシュする方法を変更するには、setPassword()を変更します(これはお勧めできません)。