Yii CPasswordHelper не проверяет пароль

Привет я пытаюсь использовать методы аутентификации yii, чтобы создать страницу входа для моего сайта. я не знаю, правильно ли я пишу.
это моя форма входа в систему:

 <?php $this->beginWidget('WrapViewWidget'); ?>
<div id="login-header">
here you can create Question ...
</div>
<div class="container">
<div id="login-content">
<?php  $form=$this->beginWidget('bootstrap.widgets.TbActiveForm', array(
'id' => 'login-form',
'layout' => TbHtml::FORM_LAYOUT_HORIZONTAL,
'enableClientValidation' => true,
'clientOptions' => array(
'validateOnSubmit' => true,
),
)); ?>
<div class="span5">
<?php echo $form->labelEx($model, 'username'); ?>
<?php echo $form->textField($model, 'username',array('class'=> 'form-control'); ?>
<?php echo $form->error($model, 'username'); ?>
</div>
<div class="span5">
<?php echo $form->labelEx($model, 'password'); ?>
<?php echo $form->passwordField($model, 'password', array('class' => 'form-control'); ?>
<?php echo $form->error($model, 'password'); ?>
</div>
<div class="span5 rememberMe">
<?php echo CHtml::activeCheckBox($model, 'rememberMe'); ?>
<?php echo CHtml::activeLabel($model, 'rememberMe'); ?>
</div>
<div>
<?php echo TbHtml::submitButton('Login', array('class' => 'btn-login')); ?>
</div>
<?php $this->endWidget(); ?>
</div>
</div>
<?php $this->endWidget(); ?>

и это мой userIdentity:

class UserIdentity extends CUserIdentity{
private $_id;

public function __construct($username, $password)
{
$this->username = $username;
$this->password = $password;
}
public function authenticate()
{
$record = User::model()->findByAttributes(array('username' => $this->username));
if ($record === null)
$this->errorCode = self::ERROR_USERNAME_INVALID;
else if(!CPasswordHelper::verifyPassword($this->password,$record->password))
$this->errorCode = self::ERROR_PASSWORD_INVALID;
else {
$this->_id = $record->user_id;
$this->setState('username', $record->username);
$this->errorCode = self::ERROR_NONE;
}
return !$this->errorCode;
}

public function getId()
{
return $this->_id;
}

public function getUsername()
{
return $this->username;
}

public function getPassword()
{
return $this->password;
}

}

я реализовал beforeSave в моей модели пользователя, как это:

public function beforeSave()
{
if (parent::beforeSave()) {
$this->password=CPasswordHelper::hashPassword($this->password);
return true;
}
return false;
}

и у меня есть эти методы в LoginForm:

public function authenticate($attribute,$params)
{
$this->_identity=new UserIdentity($this->username,$this->password);
if(!$this->_identity->authenticate())
$this->addError('password','username or password is wrong!');
}

public function login()
{
if ($this->_identity === null) {
$this->_identity = new UserIdentity($this->username, $this->password);
$this->_identity->authenticate();
}
if ($this->_identity->errorCode === UserIdentity::ERROR_NONE) {
$duration = $this->rememberMe ? 3600 * 24 * 30 : 0; // 30 days
Yii::app()->user->login($this->_identity, $duration);
return true;
} else
return false;
}
public function rules()
{
return array(
// username and password are required
array('username, password', 'required'),
// rememberMe needs to be a boolean
array('rememberMe', 'boolean'),

array('email', 'email'),
// password needs to be authenticated
array('password', 'authenticate'),
);
}

Я перепробовал много вещей, и я уверен, что я ввожу правильный пароль. но я не знаю, где моя ошибка. я могу ошибаться. спасибо.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector