Аутентификация и авторизация Yii
Primary tabs
Официальное руководство на русском здесь
Базовая идея - что к чему =>
для начала мы создаём модель формы входа в систему - с дополнительным методом login() который и произведёт проверку:
<?php
class LoginForm extends CFormModel
{
public $username;
public $password;
public $rememberMe= true;
private $_identity;
public function rules()
{
return array(
array('username', 'length', 'min'=>1, 'max'=>127),
array('password', 'length', 'min'=>1, 'max'=>127)
);
}
/*ниже описываем пордя кхода в систему пользователем*/
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)
{
// CWebUser::allowAutoLogin = true;
/*ЗДЕСЬ ПРОБЛЕМА - runtime - папка необходимая
для хранения временных файлов, доступ к которым
долежн быть ограничен*/
$duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days
Yii::app()->user->login($this->_identity);
return true;
}
else
return false;
}
}
как мы видим этот метод инициализирует компонент UserIdentity =
$this->_identity=new UserIdentity($this->username,$this->password);
$this->_identity->authenticate();(мы пишем код данного компонента самостоятельно и размещаем в папке protected/components/UserIdentity.php)-
вот этот код=
<?php
/*класс ниже реализует ряд
методов, которые будут испоьзоваться для
идектификации пользователя*/
class UserIdentity extends CUserIdentity
{
private $_id;// идентификатор
/*для тестирования определим ниже стандартный логин
и пароль*/
private $name = "qwe";
private $pass = "123";
public function authenticate()
{
// $record=User::model()->findByAttributes(array('username'=>$this->username));
if($this->name!==$this->username)
$this->errorCode=self::ERROR_USERNAME_INVALID;
else if($this->pass!== $this->password)
$this->errorCode=self::ERROR_PASSWORD_INVALID;
else
{
$this->_id=1;
$this->setState('title', "lya-lya-lya");
$this->errorCode=self::ERROR_NONE;
}
return !$this->errorCode;
}
public function getId()
{
return $this->_id;
}
}
в случае если метод authenticate() вернёт успешный результат - открывается сессия в методе login() (см. первый листинг)
или выдаются куки данному пользователю (в примере выше - я не выдаю куки - просто открываю сессию)
Проверка
Чтобы проверить факт того, что пользователь вошёл в систему - выполнить подобный код:
if (Yii::app()->user->isGuest) echo "У нас гости =)";
else echo "Все дома =)";
- Log in to post comments
- 5898 reads
yii-primer
Thu, 12/06/2012 - 11:00
Permalink
БОлее пробдвиный вариант
более интересный пример смотрите здесь = http://fkn.ktu10.com/?q=node/3003