borodatych
недавненько
Доброго времени суток.
Переношу имеющийся проект, написанный в функциональном стиле, на данный ФВ.
Так как база уже есть, то текущий модуль авторизации чуть-чуть не подходит.
Но ни чего, по аналогии делаю свой...
За основу взял class Kohana_Auth_ORM extends Auth
Но с небольшим НО, просто class Auth_MyORM extends Auth, минуя пустой класс для расширения
class Auth_MyORM extends Kohana_Auth_MyORM{}
Первое что сделал:
Первым делом я избавился от жесткой привязки к имени модели.
Заменил ORM::factory('User') на ORM::factory($this->_config->model).
Теперь имя модели берется из конфига, добавил гибкости так сказать.
После, закоментировал $password = $this->hash($password); , и дал тестовому пользователю просто пароль, далее будет своя реализация $this->hash()
Потом я избавился от ролей, их попросту нет в текущей базе...
Попутно пришлось $user->unique_key($username), пере определить в своей модели, заменив username на login.
Так как не считаю кол-во входов и прочее:
То закомментировал $user->complete_login()
В итоге, все как бы работает. В нужном контроллере:
$this->e(Session::instance()); - vardump + exit
И наблюдаю выхлоп:
Радостно комментирую vardump и жму F5.
В контролере отвечающему маршруту /cabinet:
Получаю:
[test] => testValue - был сформирован в Controller_Base
То что формировалось в Controller_UAuth, посеялось...
Есть у кого идеи, почему, что упустил?
Переношу имеющийся проект, написанный в функциональном стиле, на данный ФВ.
Так как база уже есть, то текущий модуль авторизации чуть-чуть не подходит.
Но ни чего, по аналогии делаю свой...
За основу взял class Kohana_Auth_ORM extends Auth
Но с небольшим НО, просто class Auth_MyORM extends Auth, минуя пустой класс для расширения
class Auth_MyORM extends Kohana_Auth_MyORM{}
Первое что сделал:
PHP:
protected function _login($user, $password, $remember){
if( !is_object($user) ){
$username = $user;
// Load the user
$user = ORM::factory($this->_config->model);
$user->where($user->unique_key($username), '=', $username)->find();
}
if( is_string($password) ){
// Create a hashed password
//$password = $this->hash($password);
}
// If the passwords match, perform a login
//if( $user->has('roles', ORM::factory('Role', array('name' => 'login'))) AND $user->password === $password ){
if( $user->password === $password ){
if( $remember === TRUE ){
// Token data
$data = array(
'user_id' => $user->pk(),
'expires' => time() + $this->_config['lifetime'],
'user_agent' => sha1(Request::$user_agent),
);
// Create a new autologin token
$token = ORM::factory('User_Token')
->values($data)
->create();
// Set the autologin cookie
Cookie::set('authautologin', $token->token, $this->_config['lifetime']);
}
// Finish the login
$this->complete_login($user);
return TRUE;
}
// Login failed
return FALSE;
}
Заменил ORM::factory('User') на ORM::factory($this->_config->model).
Теперь имя модели берется из конфига, добавил гибкости так сказать.
После, закоментировал $password = $this->hash($password); , и дал тестовому пользователю просто пароль, далее будет своя реализация $this->hash()
Потом я избавился от ролей, их попросту нет в текущей базе...
Попутно пришлось $user->unique_key($username), пере определить в своей модели, заменив username на login.
Так как не считаю кол-во входов и прочее:
PHP:
protected function complete_login($user){
//$user->complete_login();
return parent::complete_login($user);
}
В итоге, все как бы работает. В нужном контроллере:
PHP:
class Controller_UAuth extends Controller_Base{
...
if( $this->auth->login($data['login'],$data['password'], (bool) $data['remember']) ){
Session::instance()->set('test3','testValue3');
$this->e(Session::instance());
HTTP::redirect('/cabinet');
}
И наблюдаю выхлоп:
HTML:
[test] => testValue
[last_active] => 1418792586
[UAuth] => Model_Clients Object
[test3] => testValue3
В контролере отвечающему маршруту /cabinet:
PHP:
class Controller_UAccount extends Controller_UAuth{
...
public function before(){
$this->e( Session::instance('cookie') );
parent::before();
}
HTML:
Session_Cookie Object
(
[_name:protected] => session_cookie
[_lifetime:protected] => 43200
[_encrypted:protected] => default
[_data:protected] => Array
(
[test] => testValue
[last_active] => 1418792586
)
[_destroyed:protected] =>
)
То что формировалось в Controller_UAuth, посеялось...
Есть у кого идеи, почему, что упустил?