PHP code example of ella123 / hyperf-auth
1. Go to this page and download the library: Download ella123/hyperf-auth library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
ella123 / hyperf-auth example snippets
// config/autoload/exceptions.php
return [
'handler' => [
'http' => [
\ELLa123\HyperfAuth\AuthExceptionHandler::class,
],
],
];
declare(strict_types=1);
namespace App\Controller;
use Hyperf\Di\Annotation\Inject;
use Hyperf\HttpServer\Annotation\Controller;
use Hyperf\HttpServer\Annotation\GetMapping;
use ELLa123\HyperfAuth\Annotation\Auth;
use ELLa123\HyperfAuth\AuthManager;
/**
* @Controller
* Class IndexController
*/
class IndexController extends AbstractController
{
/**
* @Inject
* @var AuthManager
*/
protected $auth;
/**
* @GetMapping(path="/login")
* @return array
*/
public function login()
{
/** @var User $user */
$user = User::query()->firstOrCreate(['name' => 'test', 'avatar' => 'avatar']);
return [
'status' => $this->auth->guard('session')->login($user),
];
}
/**
* @GetMapping(path="/sso/login")
* @return array
*/
public function ssoLogin()
{
/** @var User $user */
$user = User::query()->firstOrCreate(['name' => 'test', 'avatar' => 'avatar']);
return [
'token' => $this->auth->guard('sso')->login($user, [], 'pc'), // sso 方法支持第二个参数,传定义好的客户端
];
}
/**
* @Auth("session")
* @GetMapping(path="/logout")
*/
public function logout()
{
$this->auth->guard('session')->logout();
return 'logout ok';
}
/**
* 使用 Auth 注解可以保证该方法必须通过某个 guard 的授权,支持同时传多个 guard,不传参数使用默认 guard
* @Auth("session")
* @GetMapping(path="/user")
* @return string
*/
public function user()
{
$user = $this->auth->guard('session')->user();
return 'hello '.$user->name;
}
}
declare(strict_types=1);
namespace App\Controller;
use Hyperf\HttpServer\Annotation\Middleware;
use ELLa123\HyperfAuth\AuthMiddleware;
use Hyperf\Di\Annotation\Inject;
use Hyperf\HttpServer\Annotation\GetMapping;
use ELLa123\HyperfAuth\AuthManager;
/**
* @Middleware(AuthMiddleware::class)
* Class IndexController
*/
class IndexController extends AbstractController
{
/**
* @Inject
* @var AuthManager
*/
protected $auth;
/**
* @GetMapping(path="/user")
* @return string
*/
public function user()
{
$user = $this->auth->guard()->user();
return 'hello '.$user->name;
}
}
declare(strict_types=1);
use ELLa123\HyperfAuth\AuthMiddleware;
class SessionAuthMiddleware extends AuthMiddleware {
protected $guards = ['session']; // 支持多个 guard
}
$auth = auth(); // 控制器内也可以通过 @Inject 注入
$user = new \HyperfTest\DemoUser(1);
// 直接调用 AuthGuard 方法,这种情况下会获取 默认 guard 然后调用 guard 的对应方法
$auth->login($user); // 默认使用 jwt 驱动,该方法将返回 token 字符串
$auth->logout(); // 退出登录
$auth->check(); // 检查是否登录
$auth->id(); // 获取当前登录用户的id,无需查数据库
$auth->guest(); // 是否游客/是否未登录
$auth->user(); // 若登录返回当前登录用户,否则返回null
/** @var \ELLa123\HyperfAuth\Guard\JwtGuard $jwtGuard */
$jwtGuard = $auth->guard('jwt');
$jwtGuard->user('your token or null'); // jwt 驱动支持手动传入 token,如不传或者传null则从 request 中解析
$jwtGuard->check('your token or null');
$jwtGuard->id('your token or null'); // 无需查数据库
$jwtGuard->guest('your token or null');
$jwtGuard->refresh('your token or null'); // 该方法返回新的 token 或者 null
$jwtGuard->login($user, ['sub' => 'qbhy0715','iss' => 'hyperf-auth',]); // 自定义payload
$jwtGuard->getPayload('your token or null'); // 获取自定义 payload
$auth->guard()->login($user); // guard 方法不传参数或者传null都将使用默认值
// 使用 session 驱动需要安装 hyperf/session 并启用 session
$auth->guard('session')->login($user); // guard 方法不传参数或者传null都会获取默认值
bash
php bin/hyperf.php vendor:publish ella123/hyperf-auth
bash
php bin/hyperf.php gen:auth