Yii после успешного входа в систему Yii::app()->user->id дает пустой результат, а свойство «UserIdentity.email» не определено сообщение, когда я печатаю $this->email в функции аутентификации UserIdentity, но электронная почта через форму входа доступна в $this->username Вот моя функция контроллера
public function actionLogin() {
$model = new LoginForm();
if (isset($_POST['ajax']) && $_POST['ajax'] === 'login-form') {
echo CActiveForm::validate($model);
Yii::app()->end();
}
if (isset($_POST['LoginForm'])) {
$model->attributes = $_POST['LoginForm'];
if ($model->validate() && $model->login()) {
echo 'success';
exit;
} else {
echo 'failure';
exit;
}
}
$this->render('login', array('model' => $model));
}
Вот мой просмотренный файл
<?php
$form = $this->beginWidget('CActiveForm', array(
'id' => 'login-form',
'enableAjaxValidation' => true,
'enableClientValidation' => true,
'clientOptions' => array(
'validateOnSubmit' => true,
),
'htmlOptions' => array(
'id' => 'form-contact'
),
));
echo CHtml::errorSummary($model);
?>
<div id="form-left">
<label for="text-email">Email(<span style="color: red;">*</span>)</label><br />
<?php echo $form->textField($model, 'email', array('class' => 'input')); ?><br />
<label for="text-password">Password (<span style="color: red;">*</span>)</label><br />
<?php echo $form->passwordField($model, 'password', array('class' => 'input')); ?><br />
<br>
<?php echo CHtml::submitButton('Login', array('class' => 'button', 'style' => 'margin-bottom:50px;')); ?>
</div>
<?php $this->endWidget(); ?>
Вот код формы входа
<?php
class LoginForm extends CFormModel {
public $email;
public $password;
private $_identity;
public function rules() {
return array(
array('password, email', 'required'),
array('password', 'authenticate'),
);
}
public function attributeLabels() {
return array(
'email' => Yii::t('labels', 'e-mail'),
'password' => Yii::t('labels', 'Password'),
);
}
public function authenticate($attribute,$params)
{
if(!$this->hasErrors()) // we only want to authenticate when no input errors
{
$identity=new UserIdentity($this->email,$this->password);
$identity->authenticate();
switch($identity->errorCode)
{
case UserIdentity::ERROR_NONE:
Yii::app()->user->login($identity);
break;
case UserIdentity::ERROR_USERNAME_INVALID:
$this->addError('email','Email address is incorrect.');
break;
default: // UserIdentity::ERROR_PASSWORD_INVALID
$this->addError('password','Password is incorrect.');
break;
}
}
}
public function login() {
if ($this->_identity === null) {
$this->_identity = new UserIdentity($this->email, $this->password);
$this->_identity->authenticate();
}
if ($this->_identity->errorCode === UserIdentity::ERROR_NONE)
return true;
else
return false;
}
}
А ВОТ МОЙ КЛАСС ИДЕНТИФИКАЦИИ ПОЛЬЗОВАТЕЛЯ
<?php
class UserIdentity extends CUserIdentity {
private $_id;
public function authenticate() {
$user = User::model()->findByAttributes(array(
'email' => $this->username,
));
if ($user === null) { // No user found!
$this->errorCode = self::ERROR_USERNAME_INVALID;
} else if ($user->password !== md5($this->password)) {
$this->errorCode = self::ERROR_PASSWORD_INVALID;
} else {
$this->errorCode = self::ERROR_NONE;
$this->setState('userid', $user->id);
$this->_id = $user->id;
}
return !$this->errorCode;
}
public function getId() {
return $this->_id;
}
}