Rumah  >  Artikel  >  rangka kerja php  >  Cara menggunakan rangka kerja Hyperf untuk pengesahan antara muka

Cara menggunakan rangka kerja Hyperf untuk pengesahan antara muka

王林
王林asal
2023-10-25 09:31:491596semak imbas

Cara menggunakan rangka kerja Hyperf untuk pengesahan antara muka

Cara menggunakan rangka kerja Hyperf untuk pengesahan antara muka

Pengesahan ialah isu keselamatan yang penting dalam pembangunan aplikasi web, ia boleh melindungi antara muka kami daripada diakses oleh pengguna yang tidak dibenarkan. Apabila menggunakan rangka kerja Hyperf untuk membangunkan antara muka, kita boleh menggunakan mekanisme pengesahan yang disediakan oleh Hyperf untuk melaksanakan pengesahan antara muka. Artikel ini akan memperkenalkan cara menggunakan rangka kerja Hyperf untuk pengesahan antara muka dan memberikan contoh kod khusus.

1. Memahami pengesahan antara muka

Pengesahan antara muka ialah proses mengesahkan maklumat identiti pengguna untuk menentukan sama ada pengguna mempunyai hak untuk mengakses antara muka. Kaedah pengesahan biasa termasuk pengesahan berasaskan token dan pengesahan berasaskan peranan.

Pengesahan berasaskan token dikeluarkan oleh Token selepas pengguna log masuk. Setiap kali pengguna meminta antara muka, pengguna perlu membawa Token dalam pengepala permintaan Pelayan mengesahkan kesahihan Token dan menentukan sama ada identiti pengguna adalah sah.

Pengesahan berasaskan peranan adalah dengan memberikan peranan dan kebenaran yang berbeza kepada pengguna Apabila pengguna meminta antara muka, pelayan akan mengesahkan sama ada pengguna mempunyai hak untuk mengakses antara muka berdasarkan peranan pengguna.

2. Konfigurasikan pengesahan antara muka rangka kerja Hyperf

  1. Pasang komponen jwt

Rangka kerja Hyperf menyediakan komponen Hyperf/Jwt untuk menyokong pengesahan antara muka Kami perlu memasang komponen ini dalam projek. Jalankan arahan berikut dalam direktori akar projek:

composer require hyperf/jwt
  1. Konfigurasi middleware

Middleware rangka kerja hyperf boleh melakukan beberapa pemprosesan sebelum atau selepas permintaan sampai ke pengawal. Kami boleh melaksanakan pengesahan antara muka dengan mengkonfigurasi middleware.

Tambah kod berikut dalam fail config/autoload/middleware.php:

return [
    'http' => [
        AppMiddlewareJwtAuthMiddleware::class,
    ],
];
  1. Tulis middleware

Buat fail JwtAuthMiddleware.php dalam direktori app/Middleware dan tulis kod berikut:

Pengesahan Antara Muka Hyperf

    Log masuk menjana Token
Dalam antara muka log masuk, selepas pengguna disahkan, komponen Hyperf/Jwt digunakan untuk menjana Token dan mengembalikannya ke hujung hadapan perlu membawa Token setiap kali ia meminta antara muka. Contohnya adalah seperti berikut:

<?php

declare(strict_types=1);

namespace AppMiddleware;

use HyperfDiAnnotationInject;
use HyperfHttpServerContractRequestInterface;
use HyperfHttpServerContractResponseInterface;
use HyperfUtilsContext;
use HyperfUtilsExceptionParallelExecutionException;
use Phper666JwtAuthJwt;

class JwtAuthMiddleware implements MiddlewareInterface
{
    /**
     * @Inject
     * @var Jwt
     */
    protected $jwt;

    /**
     * @Inject
     * @var RequestInterface
     */
    protected $request;

    /**
     * @Inject
     * @var ResponseInterface
     */
    protected $response;

    /**
     * 接口鉴权逻辑处理
     */
    public function process(RequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        if (!$this->jwt->checkToken()) {
            return $this->response->json([
                'code' => 401,
                'message' => 'Unauthorized',
            ]);
        }
        
        // 鉴权通过,将用户信息保存在Context中,后续控制器可通过Context获取用户信息
        Context::set('user', $this->jwt->getParserData());

        return $handler->handle($request);
    }
}

    Pengesahan Antaramuka
Dalam antara muka yang memerlukan pengesahan, kita boleh mendapatkan maklumat pengguna melalui Konteks dan menentukan sama ada pengguna mempunyai hak untuk mengakses antara muka. Contohnya adalah seperti berikut:

<?php

declare(strict_types=1);

namespace AppController;

use HyperfHttpServerAnnotationAutoController;
use HyperfDiAnnotationInject;
use Phper666JwtAuthJwt;

/**
 * @AutoController
 */
class AuthController
{
    /**
     * @Inject
     * @var Jwt
     */
    protected $jwt;

    public function login()
    {
        // 获取用户信息
        $userInfo = [
            'user_id' => 1,
            'username' => 'admin',
        ];

        // 生成Token
        $token = $this->jwt->getToken($userInfo);

        // 返回Token给前端
        return [
            'code' => 200,
            'message' => 'success',
            'data' => [
                'token' => $token,
            ],
        ];
    }
}

Melalui langkah di atas, kami boleh melaksanakan pengesahan antara muka dalam rangka kerja Hyperf. Dalam antara muka yang memerlukan pengesahan, gunakan perisian tengah untuk mengesahkan dan mengesahkan permintaan, dan kemudian melaksanakan pemprosesan yang sepadan berdasarkan hasil pengesahan. Ini boleh memastikan keselamatan antara muka dengan berkesan dan memastikan bahawa hanya pengguna yang dibenarkan boleh mengakses antara muka.

Atas ialah kandungan terperinci Cara menggunakan rangka kerja Hyperf untuk pengesahan antara muka. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn