定制 assin/php-auth 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

assin/php-auth

Composer 安装命令:

composer require assin/php-auth

包简介

README 文档

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));

统计信息

  • 总下载量: 7
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 3
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: Unknown
  • 更新时间: 2020-06-09

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固