- 仿照 laravel auth 元件, 抽離出其中的核心元件, 形成當前擴充套件包
- 將 UserProvider 與 Guard 抽離出去, 形成單獨擴充套件包, 方便擴充套件, 預設使用以下組合
* fx/eloquent-provider
使用 Eloquent ORM ;
* fx/session-guard
使用 session 作為 guard ;
使用
安裝
composer require fx/hyperf-http-auth
釋出配置檔案
php bin/hyperf.php vendor:publish fx/hyperf-http-auth
建立使用者 model 並修改為以下配置
<?php
declare (strict_types=1);
namespace App\Model;
use Fx\HyperfHttpAuth\Contract\Authenticatable;
use Hyperf\DbConnection\Model\Model;
class User extends Model implements Authenticatable
{
use Fx\HyperfHttpAuth\Authenticatable;
}
配置依賴擴充套件
- fx/session-guard
依賴 hyperf/session
需要正確配置其相關內容 官方文件
在 controller 中使用
<?php
declare(strict_types=1);
namespace App\Controller;
use App\Model\User;
use Fx\HyperfHttpAuth\Contract\HttpAuthContract;
use Hyperf\Di\Annotation\Inject;
class IndexController extends AbstractController
{
/**
* @Inject()
* @var HttpAuthContract
*/
protected $auth;
public function index()
{
return $this->data();
}
/**
* 登入
*/
public function login()
{
/** 方式 1 */
// 等價於 auth()->login(User::first());
$this->auth->login(User::first());
/** 方式 2 */
// 等價於 auth()->attempt(['email' => 'xxx', 'password' => '123456']);
$this->auth->attempt(['email' => 'xxx', 'password' => '123456']);
return $this->data();
}
/**
* 登出
*/
public function logout()
{
// 等價於 auth()->logout();
$this->auth->logout();
return $this->data();
}
protected function data()
{
return [
'user' => auth()->user(),
'is_login' => auth()->check(),
];
}
}
擴充套件 UserProvider
- 實現 Fx\HyperfHttpAuth\Contract\UserProvider
這個抽象類
- 新增 Fx\HyperfHttpAuth\Annotation\UserProviderAnnotation
類註解, 該註解接收一個引數, 為該驅動的名稱
- 可參考: fx/eloquent-provider
擴充套件 Guard
- 實現 Fx\HyperfHttpAuth\Contract\StatefulGuard
這個抽象類
- 新增 Fx\HyperfHttpAuth\Annotation\GuardAnnotation
類註解, 該註解接收一個引數, 為該驅動的名稱
- 可參考: fx/session-guard
本作品採用《CC 協議》,轉載必須註明作者和本文連結