Ich habe ein Formular, in dem ich versuche, das Passwort zurückzusetzen. Ich habe 3 Felder Passwort, Changepassword und Re-Enterpassword.Passwort-Validierung in Yii2 zurücksetzen
Zuerst muss ich überprüfen, ob das Passwort-Feld mit Datenbank-Passwort übereinstimmt.
Während der Benutzeranmeldung habe ich die standardmäßige Yii2-Funktionalität verwendet, die ein zufälliges Passwort generiert und dieses Passwort in der Datenbank speichert. Ich habe auch die Standard-Login-Funktionalität während der Benutzeranmeldung verwendet.
Und jetzt, um das Passwort zu überprüfen, versuche ich die gleiche Standard-Yii2-Validierung, die bei der Anmeldung verwendet wird. Aber es funktioniert nicht gut. Es gibt immer die Validierung wahr, wenn ich den Controller mit $ user-> validate() gecheckt und eingecheckt habe, was Sie im folgenden Code finden.
Ich habe ein view
resetProfilePassword.php, in dem ich eine Form haben
<?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(); ?>
Ich habe ein 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;
}
}
Dies ist 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
]);
}
Bitte helfen Sie mir, wo ich mit dem Problem konfrontiert bin. Ist dies nicht der richtige Weg ist, bitte bei der Bereitstellung der besseren Art und Weise helfen Sie mir zu validieren Passwort zu validieren
In 'resetProfilePasswordForm.php' in der Methode' getUser() 'haben Sie die Benutzer' $ this -> _ user 'und '$ this-> username', um das Benutzermodell zu erhalten. Aber ich kann nicht sehen, wo '$ this-> username' eingestellt ist. Warum verwenden Sie nicht die Standard-Yii-Methode 'Yii :: $ app-> user-> identity'? –