Hyperf 下 http 認證元件

nfangxu發表於2019-12-25

- 仿照 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 協議》,轉載必須註明作者和本文連結

相關文章