
namespace Project\App\ORMWrappers\User; // class Repository extends \PHPixie\AuthORM\Repositories\Type\Login { // // protected function loginFields() { return array('username', 'email'); } } namespace Project\App\ORMWrappers\User; // class Entity extends \PHPixie\AuthORM\Repositories\Type\Login\User { // protected function passwordHash() { return $this->password; } } namespace Project\App; class ORMWrappers extends \PHPixie\ORM\Wrappers\Implementation { protected $databaseEntities = array('user'); protected $databaseRepositories = array('user'); public function userEntity($entity) { return new ORMWrappers\User\Entity($entity); } public function userRepisitory($repository) { return new ORMWrappers\User\Repository($repository); } } namespace Project\App; class AuthRepositories extends \PHPixie\Auth\Repositories\Registry\Builder { protected $builder; public function __construct($builder) { $this->builder = $builder; } protected function buildUserRepository() { $orm = $this->builder->components()->orm(); return $orm->repository('user'); } } namespace Project\App; class Builder extends \PHPixie\DefaultBundle\Builder { protected function buildAuthRepositories() { return new AuthRepositories($this); } } CREATE TABLE `tokens` ( `series` varchar(50) NOT NULL, `userId` int(11) DEFAULT NULL, `challenge` varchar(50) DEFAULT NULL, `expires` bigint(20) DEFAULT NULL, PRIMARY KEY (`series`) ) // /assets/auth.php return array( 'domains' => array( 'default' => array( // user app 'repository' => 'app.user', 'providers' => array( // 'session' => array( 'type' => 'http.session' ), // ( "remember me") 'cookie' => array( 'type' => 'http.cookie', // session // 'persistProviders' => array('session'), // 'tokens' => array( 'storage' => array( 'type' => 'database', 'table' => 'tokens', 'defaultLifetime' => 3600*24*14 // ) ) ), // 'password' => array( 'type' => 'login.password', // . // 'cookies' // "remember me" // , 'persistProviders' => array('session') ) ) ) ); // /assets/auth.php return array( 'domains' => array( 'default' => array( 'cookie' => array( 'type' => 'http.cookie', // 'tokens' => array( 'storage' => array( 'type' => 'database', 'table' => 'tokens', 'defaultLifetime' => 3600*24*14, 'refresh' => false ) ) ), 'password' => array( 'type' => 'login.password', 'persistProviders' => array('cookie') ) ) ) ); namespace Project\App\HTTPProcessors; class Auth extends \PHPixie\DefaultBundle\Processor\HTTP\Actions { protected $builder; public function __construct($builder) { $this->builder = $builder; } // public function defaultAction($request) { $user = $this->domain()->user(); return $user ? $user->username : 'not logged'; } // public function addAction($request) { $query = $request->query(); $username = $query->get('username'); $password = $query->get('password'); $orm = $this->builder->components()->orm(); $provider = $this->domain()->provider('password'); $user = $orm->createEntity('user'); $user->username = $username; // $user->passwordHash = $provider->hash($password); $user->save(); return 'added'; } // public function loginAction($request) { $query = $request->query(); $username = $query->get('username'); $password = $query->get('password'); $provider = $this->domain()->provider('password'); $user = $provider->login($username, $password); if($user) { // generate persistent cookie $provider = $this->domain()->provider('cookie'); $provider->persist(); } return $user ? 'success' : 'wrong password'; } // public function logoutAction($request) { $this->domain()->forgetUser(); return 'logged out'; } protected function domain() { $auth = $this->builder->components()->auth(); return $auth->domain(); } } Source: https://habr.com/ru/post/267177/
All Articles