我有一个表单,我正在尝试重置密码。我有3个字段密码,changepassword和re-enterpassword。
首先,我需要检查密码字段是否与数据库密码匹配。
在用户注册时,我使用了默认的Yii2功能,该功能生成随机密码并将该密码保存到数据库中。我还在用户登录时使用了默认登录功能。
现在,为了验证密码,我尝试使用登录时使用的相同默认Yii2验证。但是,它没有正常工作。当我使用$ user-> validate()回调并检查控制器时,它总是给出验证,您可以在下面的代码中找到它。
我有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
]);
}
请在我遇到问题的地方帮助我。 如果这不是正确的验证方式,请帮助我提供验证密码的更好方法
答案 0 :(得分:1)
要应用resetpasswordmodel
验证 - 只需运行validate()
方法然后 - 更新用户模型:
public function actionResetProfilePassword()
{
$resetpasswordmodel = new ResetProfilePasswordForm();
if ($resetpasswordmodel->load(Yii::$app->request->post())) {
$user = User::find()->where(['id' => Yii::$app->user->identity->id])->one();
# here we run our validation rules on the model
if ($resetpasswordmodel->validate()) {
# if it is ok - setting the password property of user
$user->password = $resetpasswordmodel->changepassword;
# and finally save it
$user->save();
}
return $this->render('ResetProfilePassword', [
'resetpasswordmodel' => $resetpasswordmodel
]);
}
答案 1 :(得分:0)
您可以创建新的哈希并将其替换为旧密码在数据库中
*注意:salt是您要还原它的电子邮件帐户。
$salt= 'omid.ahmadyani@Outlook.com';
$pass = crypt('00000000',$salt);
die($pass);
我的新密码是00000000 我的哈希通行证是omXXQw / O / i1po
S F我的英语!