Аутентификация и авторизация 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
- 5476 reads
yii-primer
Thu, 12/06/2012 - 11:00
Permalink
БОлее пробдвиный вариант
более интересный пример смотрите здесь = http://fkn.ktu10.com/?q=node/3003