パスワードの変更機能を作成しています。古いパスワード検証ルールを除いて、すべて正常に機能しています。ここに私のコードがあります
public function rules()
{
return array(
array('is_active', 'numerical', 'integerOnly'=>true),
array('first_name, joining_date,last_name, employee_code, username, password, role', 'required','on'=>array('create')),
array('employee_code', 'numerical', 'integerOnly'=>true),
array('username','email'),
array('username','valid_username','on'=>array('create')),
//array('username', 'contraints', 'readOnly'=>true, 'on'=>'update'),
array('currentPassword, newPassword, newPasswordRepeat', 'required','on'=>array('change')),
//array('newPassword', 'length', 'min' => 6, 'max'=>20, 'message'=>Yii::t("translation", "{attribute} is too short.")),
//array('newPassword','ext.SPasswordValidator.SPasswordValidator', 'preset' => 'strong', 'max' => 41),
array('newPassword', 'compare', 'compareAttribute'=>'newPasswordRepeat','on'=>array('change')),
array('currentPassword', 'equalPasswords','on'=>array('change')),
array('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements(),'on'=>array('forgotPassword')),
array('joining_date', 'safe'),
array('user_id, first_name, last_name, employee_code, username, password, role, joining_date, pending_regular_leave, pending_medical_leave, allocated_regular_leave, allocated_medical_leave, is_active', 'safe', 'on'=>'search'),
);
}
私のパスワード変更機能は
public function equalPasswords($attribute, $params)
{
$user = Users::model()->findByPk(Yii::app()->user->id);
if ($user->password != md5($attribute))
{
$this->addError($attribute, 'Old password is incorrect.');
}
}
更新方法
:
public function actionChange()
{
$model=new Users;
$model->setScenario('change');
if (isset($_POST['Users'])) {
$model->setAttributes($_POST['Users']);
if($model->validate())
{
$pass = md5($_POST['Users']['newPassword']);
$userModel = Users::model()->findByPk(Yii::app()->user->id);
$userModel->password = $pass;
$data = $userModel->update();
Yii::app()->user->setFlash('success',"Password changed successfully!");
}
}
$this->render('change_password', array('model'=>$model,true));
}
すべての正しいパラメーター (正しい古いパスワード、新しいパスワード、パスワードの再入力) でパスワードを変更しようとすると、パスワードが更新されますが、古いパスワードが正しくないというエラーも表示されます。イー。ありがとうございます。