パスワードをリセットしようとしているフォームがあります。password、changepassword、re-enterpassword の 3 つのフィールドがあります。
まず、パスワード フィールドがデータベースのパスワードと一致するかどうかを確認する必要があります。
ユーザーのサインアップ中に、ランダムなパスワードを生成し、そのパスワードをデータベースに保存するデフォルトの Yii2 機能を使用しました。また、ユーザーのログイン中にデフォルトのログイン機能を使用しました。
そして今、パスワードを検証するために、ログインで使用されるのと同じデフォルトの Yii2 検証を使用しようとしています。しかし、それはうまく機能していません。$user->validate() を使用してコントローラーをエコーしてチェックインすると、常に検証が true になります。これは、以下のコードで確認できます。
フォームがあるview
resetProfilePassword.phpがあります
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>
<?php
echo $form->field($resetpasswordmodel, 'password');
echo $form->field($resetpasswordmodel, 'changepassword');
echo $form->field($resetpasswordmodel, 'reenterpassword');
?>
<div class="form-group">
<?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
私はmodel
resetProfilePasswordForm.phpを持っています
<?php
namespace frontend\models;
use common\models\User;
use yii\base\Model;
class ResetProfilePasswordForm extends Model
{
public $password;
public $changepassword;
public $reenterpassword;
public function rules()
{
return [
['password', 'validatePassword'],
['changepassword', 'required'],
['reenterpassword', 'required'],
['reenterpassword', 'compare', 'compareAttribute'=>'changepassword', 'message'=>"Passwords don't match" ]
];
}
public function attributeLabels()
{
return [
//'user_profile_id' => 'User Profile ID',
//'user_ref_id' => 'User Ref ID',
'password' => 'Password',
'changepassword' => 'Change Password',
'reenterpassword' => 'Re-enter Password',
];
}
public function validatePassword($attribute, $params)
{
if (!$this->hasErrors()) {
$user = $this->getUser();
if (!$user || !$user->validatePassword($this->password)) {
$this->addError($attribute, 'Incorrect username or password.');
}
}
}
protected function getUser()
{
if ($this->_user === null) {
$this->_user = User::findByUsername($this->username);
}
return $this->_user;
}
}
これはcontroller
ProfileController.php です
public function actionResetProfilePassword()
{
$resetpasswordmodel = new ResetProfilePasswordForm();
if ($resetpasswordmodel->load(Yii::$app->request->post())) {
$user = User::find()->where(['id' => Yii::$app->user->identity->id])->one();
if($user->validate()){
$user->save(false);
}
}
return $this->render('ResetProfilePassword', [
'resetpasswordmodel' => $resetpasswordmodel
]);
}
私が問題に直面している場所で私を助けてください。これが正しい検証方法でない場合は、パスワードを検証するためのより良い方法を提供するのを手伝ってください