سلام استاد
در بخش تغییر رمز، رمز عبور بدون هیچ مشکلی ذخیره میشه اما موقع لاگین خطای اشتباه بودن رمز عبور رو میاره. در واقع رمز بصورت نادرست تغییر میکنه.
کدهایی که نوشتم اینا هستن:
متشکرم.
در بخش تغییر رمز، رمز عبور بدون هیچ مشکلی ذخیره میشه اما موقع لاگین خطای اشتباه بودن رمز عبور رو میاره. در واقع رمز بصورت نادرست تغییر میکنه.
کدهایی که نوشتم اینا هستن:
/** * Authenticates the password. * This is the 'authenticate' validator as declared in rules(). */ public function authenticate($attribute,$params) { if(!$this->hasErrors()) { $this->_identity= new AdminIdentity($this->username,$this->password); if(!$this->_identity->authenticate()){ $this->addError('password','نام کاربری یا رمز عبور اشتباه است.'); } } } /** * Logs in the user using the given username and password in the model. * @return boolean whether login is successful */ public function login() { if($this->_identity===null) { $this->_identity=new AdminIdentity($this->username,$this->password); $this->_identity->authenticate(); } if($this->_identity->errorCode===AdminIdentity::ERROR_NONE) { $duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days Yii::app()->user->login($this->_identity,$duration); return true; } else{ return false; } } /** * * @param type $password * @return type true when $password==$this->password */ public function validatePassword($password){ return CPasswordHelper::verifyPassword($password, $this->password); } public function afterValidate(){ parent:: afterValidate(); if($this->password=''){ $this->password= $this->_oldpass; } if(!$this->hasErrors() && $this->_oldpass!=$this->password){ $this->password= CPasswordHelper::hashPassword($this->password); } } public function afterFind() { $this->_oldpass= $this->password; } public function actionChangePass(){ $model = new ChangePassForm; if(isset($_POST['ChangePassForm'])) { $model->attributes = $_POST['ChangePassForm']; $model->validate(); if(!$model->hasErrors()) { $admin = Admins::model()->findByPk(Yii::app()->user->id); if(!$admin->validatePassword($model->oldpass)) { $model->addError('oldpass','رمز قبلی صحیح نیست.'); } else { $admin->password = $model->newpass; if($admin->save()) { Yii::app()->user->setFlash('message','رمز کاربر با موفقیت تغییر کرد.'); $this->refresh(); } else { Yii::app()->user->setFlash('message','خطایی در زمان تغییر رمز رخ داد.'); } } } } $this->render('changepass',compact('model')); }
متشکرم.