assin / php-auth
There is no license information available for the latest version (v1.0.0) of this package.
v1.0.0
2020-06-21 08:09 UTC
Requires
- php: >=7.1
- ext-json: *
- lcobucci/jwt: ^3.3
Requires (Dev)
- mockery/mockery: ^1.3.1
- phpunit/phpunit: ^8.5
This package is auto-updated.
Last update: 2025-01-21 21:23:29 UTC
README
A simple package to handle user authentication on PHP.
Features list:
- Register the custom driver to handle authentication
- Check request before call authentication method by defining middleware
Installation
Use composer to manage your dependencies and download PHPAuth:
composer require assin/php-auth
Usage
- Create a driver that implements DriverInterface.
<?php require 'vendor/autoload.php'; class SimpleDriver implements \Assin\PHPAuth\Contracts\DriverInterface { public function login(\Assin\PHPAuth\ObjectValue\Input $input) { if($input->get('username') === 'test' && $input->get('password') === 'test'){ return 'Success!'; } return 'Failed!'; } }
- Register driver to DriverBuilder.
$driver = new SimpleDriver(); $driverId = 1; $driverBuilder = new \Assin\PHPAuth\Builder\DriverBuilder([ $driverId=>$driver ]);
- Initiate request data.
$input = new \Assin\PHPAuth\ObjectValue\Input([ 'username'=>'test', 'password'=>'test' ]);
- Config auth class.
$auth = new \Assin\PHPAuth\Auth($driverBuilder); print_r($auth->login($driverId, $input));
Full example 1:
<?php require 'vendor/autoload.php'; class SimpleDriver implements \Assin\PHPAuth\Contracts\DriverInterface { public function login(\Assin\PHPAuth\ObjectValue\Input $input) { if($input->get('username') === 'test' && $input->get('password') === 'test'){ return 'Success!'; } return 'Failed!'; } } $driver = new SimpleDriver(); $driverId = 1; $driverBuilder = new \Assin\PHPAuth\Builder\DriverBuilder([ $driverId=>$driver ]); $input = new \Assin\PHPAuth\ObjectValue\Input([ 'username'=>'test', 'password'=>'test' ]); $auth = new \Assin\PHPAuth\Auth($driverBuilder); print_r($auth->login($driverId, $input)); ?>
Notice: You can register multiple drivers and change authentication behavior base on business request!
Multiple drivers example 2:
<?php require 'vendor/autoload.php'; class SimpleDriver implements \Assin\PHPAuth\Contracts\DriverInterface { public function login(\Assin\PHPAuth\ObjectValue\Input $input) { if($input->get('username') === 'test' && $input->get('password') === 'test'){ return 'Successful!'; } return 'Failed!'; } } class SimpleDriver2 implements \Assin\PHPAuth\Contracts\DriverInterface { public function login(\Assin\PHPAuth\ObjectValue\Input $input) { if($input->get('username') === 'test' && $input->get('password') === 'test'){ return ['status'=>true, 'message'=>'Successful!']; } return ['status'=>false, 'message'=>'Failed!']; } } $driverBuilder = new \Assin\PHPAuth\Builder\DriverBuilder([ 1=>new SimpleDriver(), 2=>new SimpleDriver2() ]); $input = new \Assin\PHPAuth\ObjectValue\Input([ 'username'=>'test', 'password'=>'test' ]); $auth = new \Assin\PHPAuth\Auth($driverBuilder); //Print driver 1 respond print_r($auth->login(1, $input)); print PHP_EOL; //Print driver 2 respond print_r($auth->login(2, $input));
Middleware Example:
- Create simple middleware.
Class SimpleMiddleware implements \Assin\PHPAuth\Contracts\MiddlewareInterface{ public function handle(\Assin\PHPAuth\ObjectValue\Input $input, \Closure $next) { if($input->get('username') === 'test'){ throw new Exception('The user is banned'); } $next($input); } }
- Register the middleware to middleware/kernel and call login.
$auth = new \Assin\PHPAuth\Auth($driverBuilder, new \Assin\PHPAuth\Middleware\Kernel([ new SimpleMiddleware() ])); try { print_r($auth->login(1, $input)); }catch (\Exception $exception){ print $exception->getMessage(); }
JWT Driver
JWT driver use lcobucci/jwt package for authentication with Authorization header param. We must implement some interfaces to use the driver.
Implement UserRepositoryInterface class This interface find user and return an object that implements UserInterface.
<?php use Assin\PHPAuth\Auth; use Assin\PHPAuth\Builder\DriverBuilder; use Assin\PHPAuth\Config\Config; use Assin\PHPAuth\Contracts\UserInterface; use Assin\PHPAuth\Contracts\UserRepositoryInterface; use Assin\PHPAuth\Drivers\JWT\Config as JWTConfig; use Assin\PHPAuth\Drivers\JWT\JWTDriver; use Assin\PHPAuth\Drivers\JWT\Response; use Assin\PHPAuth\ObjectValue\Input; require 'vendor/autoload.php'; class SimpleUserRepository implements UserRepositoryInterface { public function findForLogin(Input $input) : UserInterface{ $userId = $input->get('username')=='1234' && $input->get('password')=='1234' ? 1 : 0; return new \Assin\PHPAuth\Drivers\JWT\User($userId); } public function findForForgetPassword(Input $input) : UserInterface{ $userId = $input->get('username')=='1234' ? 1 : 0; return new \Assin\PHPAuth\Drivers\JWT\User($userId); } } $userRepository = new SimpleUserRepository(); $driverId = Config::DRIVER_JWT; $JWTDriver = new JWTDriver(new JWTConfig(), $userRepository); $driverBuilder = new DriverBuilder([$driverId => $JWTDriver]); $input = new Input(['username'=>'1234', 'password'=>'1234']); /** @var Response $response */ $response = (new Auth($driverBuilder))->login($driverId, $input); $token = $response->getData()['token']; print_r($token);
JWT Driver - Create guest token
<?php require 'vendor/autoload.php'; $JWTDriver = new \Assin\PHPAuth\Drivers\JWT\JWTDriver(); $token = $JWTDriver->createToken(); print_r($JWTDriver->plainToken($token, true));
JWT Driver - Refresh token
<?php require 'vendor/autoload.php'; $oldToken = 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImp0aSI6IjRmMWcyM2ExMmFhIn0.eyJqdGkiOiI0ZjFnMjNhMTJhYSIsImlhdCI6MTU5MjExNDczMywiZXhwIjoxNTkyMTE4MzMzLCJ1c2VyX2luZm8iOnsiaWQiOjF9fQ.gLhkKVtSjx5pDLX973grZ94CHKv5gsYw99sfeX5XzQs'; $JWTDriver = new \Assin\PHPAuth\Drivers\JWT\JWTDriver(); $token = $JWTDriver->parseToTokenObject($oldToken); $newToken = $JWTDriver->refreshToken($token); print_r($JWTDriver->plainToken($newToken, true));