Rumah rangka kerja php ThinkPHP Menggunakan pengesahan JWT dalam ThinkPHP6

Menggunakan pengesahan JWT dalam ThinkPHP6

Jun 20, 2023 pm 11:36 PM
thinkphp pengaturcaraan pengesahan jwt

Dengan perkembangan Internet, bilangan pengguna aplikasi Web telah meningkat secara beransur-ansur, dan isu keselamatan menjadi semakin penting. Pengesahan adalah bahagian penting dalam keselamatan aplikasi web kerana hanya pengguna yang disahkan boleh mengakses sumber yang memerlukan kebenaran.

JSON Web Token (JWT) ialah token pengesahan yang ringan dan serba lengkap yang merupakan cara terbaik untuk memindahkan maklumat antara aplikasi web dengan selamat. Skim pengesahan JWT sesuai untuk sistem teragih dan aplikasi satu halaman.

ThinkPHP ialah rangka kerja PHP popular yang menyediakan banyak alatan untuk membangunkan aplikasi web selamat. Dalam artikel ini, kami akan membincangkan cara menggunakan JWT untuk pengesahan dalam ThinkPHP6 untuk meningkatkan keselamatan aplikasi anda.

Persekitaran pembangunan dan kebergantungan

Sebelum kita bermula, kita perlu memastikan bahawa persekitaran pembangunan telah disediakan dengan betul. Berikut ialah persekitaran dan kebergantungan yang digunakan dalam artikel ini. Sila tukar mengikut keperluan anda.

  • PHP 7.2 atau lebih tinggi
  • ThinkPHP 6.0.0 atau lebih tinggi
  • Pustaka PHP Firebase JWT

Langkah 1 : Pasang Firebase JWT Pustaka PHP

Memasang pustaka PHP JWT Firebase ialah langkah pertama untuk menggunakan skim pengesahan JWT. Pustaka ini akan membantu kami membuat, menandatangani dan mengesahkan JWT.

Kami boleh memasang pustaka Firebase JWT PHP menggunakan Composer. Masukkan arahan berikut dalam baris arahan:

composer require firebase/php-jwt

Langkah 2: Cipta kelas Token

Untuk memudahkan pengurusan dan penggunaan JWT, kami mencipta kelas bernama Token untuk mengendalikan pelbagai aspek pengesahan JWT . Kelas ini akan merangkumi fungsi seperti mencipta token, mengesahkan token dan mendapatkan maklumat token.

Buat fail Token.php dalam direktori app/common dan tambahkan kod berikut:

<?php

namespace appcommon;

use FirebaseJWTJWT;

class Token
{
    private static $key = 'your_secret_key';
    private static $alg = 'HS256';

    public static function createToken($data, $expiration = 3600)
    {
        $payload = [
            'iss' => 'localhost',
            'sub' => 'token',
            'iat' => time(),
            'exp' => time() + $expiration,
            'data' => $data
        ];

        return JWT::encode($payload, self::$key, self::$alg);
    }

    public static function decodeToken($token)
    {
        return JWT::decode($token, self::$key, [self::$alg]);
    }

    public static function getDataByToken($token)
    {
        $decoded = self::decodeToken($token);

        if (isset($decoded->data)) {
            return $decoded->data;
        } else {
            return false;
        }
    }

    public static function verifyToken($token)
    {
        $result = false;
        try {
            $decoded = self::decodeToken($token);
            $result = true;
        } catch (Exception $e) {
            // Invalid token
        }
        return $result;
    }
}

Dalam kod, kami menggunakan kaedah FirebaseJWTJWT dan encode() daripada decode() perpustakaan untuk mencipta dan menghuraikan JWT. $key ialah kunci yang kami gunakan untuk menandatangani JWT dan $alg ialah algoritma yang kami pilih. Dalam kaedah createToken(), kami menggunakan empat kekunci daripada muatan JWT (iss, iat, exp dan sub) dan menambah data tersuai. Parameter $expiration menentukan masa tamat tempoh JWT. Oleh itu, JWT hanya boleh digunakan dalam tempoh sah.

Langkah 3: Sahkan token dalam middleware

Sekarang kami telah mencipta kelas Token untuk mengendalikan kerja berkaitan JWT, kami perlu mengesahkan pengguna JWT dalam middleware. Menggunakan perisian tengah memudahkan untuk memintas dan menetapkan respons dalam kod pengawal aplikasi anda, dan anda boleh memisahkan kod tersebut ke dalam kelas yang berbeza untuk pengurusan dan pengubahsuaian yang lebih baik.

Buat fail Jwt.php dalam direktori app/middleware dan tambah kod berikut:

<?php

namespace appmiddleware;

use appcommonToken;
use thinkexceptionHttpResponseException;
use thinkResponse;

class Jwt
{
    public function handle($request, Closure $next)
    {
        if (!$request->header('Authorization')) {
            return json(['code' => 401, 'msg' => 'Unauthorized']);
        }

        $header = $request->header('Authorization');
        $token = substr($header, 7);
        if (Token::verifyToken($token)) {
            $request->data = Token::getDataByToken($token);
            return $next($request);
        } else {
            return json(['code' => 401, 'msg' => 'Unauthorized']);
        }
    }
}

Dalam middleware ini, kami menggunakan kaedah verifyToken() dalam kelas Token untuk mengesahkan JWT . Kaedah ini akan mengembalikan benar atau salah yang menunjukkan sama ada token itu sah. Jika sah, kami akan menggunakan kaedah getDataByToken() untuk mendapatkan bahagian data JWT dan menyimpannya dalam $request->data. Data ini kemudiannya tersedia kepada pengawal.

Langkah 4: Sediakan laluan

Sekarang kita telah mencipta perisian tengah, kita perlu menerapkannya pada laluan yang sesuai.

Dengan mengandaikan kami ingin melindungi laluan /api/user, kami perlu menyediakan laluan dalam fail routepi.php seperti berikut:

use appmiddlewareJwt;

Route::group('api', function() {
  Route::get('user', 'UserController@getUserInfo')->middleware(Jwt::class);
});

Perhatikan bahawa dalam laluan ini, kami akan Jwt Middleware diluluskan sebagai parameter kepada kaedah middleware(). Berikut ialah kod sampel untuk kaedah UserController dalam getUserInfo().

<?php

namespace appcontroller;

use appcommonToken;

class UserController
{
    public function getUserInfo()
    {
        $data = request()->data;
        ...
    }
    ...
}

Dalam pengawal, anda boleh mengakses data yang disimpan dalam JWT yang disahkan dengan memanggil $request->data.

Kesimpulan

Kaedah pengesahan JWT boleh menjadikan aplikasi web anda lebih selamat dan boleh dipercayai. Dalam artikel ini, kami membincangkan cara menggunakan perpustakaan Firebase JWT PHP untuk mencipta dan mengesahkan JWT dalam ThinkPHP6.

Kami mencipta kelas yang dipanggil Token, yang digunakan untuk mengendalikan kerja berkaitan JWT, dan menambahkan perisian tengah untuk mengesahkan JWT dan menetapkan data. Akhir sekali, kami menyediakan kod penghalaan dan pengawal yang menggunakan perisian tengah ini untuk mengakses data yang disimpan dalam JWT.

Tujuan utama memperkenalkan pengesahan JWT adalah untuk memastikan sumber dalam aplikasi hanya boleh digunakan oleh pengguna yang disahkan. Saya harap artikel ini membantu anda memahami cara menggunakan pengesahan JWT untuk menjamin permohonan anda!

Atas ialah kandungan terperinci Menggunakan pengesahan JWT dalam ThinkPHP6. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1528
276
Kekunci kelantangan pada papan kekunci tidak berfungsi Kekunci kelantangan pada papan kekunci tidak berfungsi Aug 05, 2025 pm 01:54 PM

First,checkiftheFnkeysettingisinterferingbytryingboththevolumekeyaloneandFn volumekey,thentoggleFnLockwithFn Escifavailable.2.EnterBIOS/UEFIduringbootandenablefunctionkeysordisableHotkeyModetoensurevolumekeysarerecognized.3.Updateorreinstallaudiodriv

Pergi dengan contoh contoh pembalakan middleware http Pergi dengan contoh contoh pembalakan middleware http Aug 03, 2025 am 11:35 AM

HTTP Log Middleware di GO boleh merakam kaedah permintaan, laluan, IP klien dan memakan masa. 1. Gunakan http.handlerfunc untuk membungkus pemproses, 2. Rekod waktu mula dan masa akhir sebelum dan selepas memanggil next.servehttp, 3. Dapatkan IP pelanggan sebenar melalui r.remoteaddr dan X-forward-for headers, 4. Gunakan log.printf untuk mengeluarkan log permintaan, 5. Kod sampel lengkap telah disahkan untuk dijalankan dan sesuai untuk memulakan projek kecil dan sederhana. Cadangan lanjutan termasuk menangkap kod status, menyokong log JSON dan meminta penjejakan ID.

Penonton pdf tepi tidak berfungsi Penonton pdf tepi tidak berfungsi Aug 07, 2025 pm 04:36 PM

Testthepdfinanotherapptodetermineiftheisseiswiththefileoredge.2.enableTetHEBuilt-Inpdfviewerbyturningoff "AlwaysopenpdffileseXternally" dan "muat turun" inedgesettings.3.clearbrowsdataincludingcookiesandcookiescookiesandcookiescookiesandcookiescookieshincookieshincookiescookiescookiescookiescookiescookiescookiescookiescookiescokiescookiescookiescookiescookiescookiescooker

Python untuk Etl Kejuruteraan Data ETL Python untuk Etl Kejuruteraan Data ETL Aug 02, 2025 am 08:48 AM

Python adalah alat yang cekap untuk melaksanakan proses ETL. 1. Pengekstrakan data: Data boleh diekstrak dari pangkalan data, API, fail dan sumber lain melalui panda, sqlalchemy, permintaan dan perpustakaan lain; 2. Penukaran Data: Gunakan panda untuk pembersihan, penukaran jenis, persatuan, pengagregatan dan operasi lain untuk memastikan kualiti data dan mengoptimumkan prestasi; 3. Pemuatan Data: Gunakan kaedah Pandas 'TO_SQL atau platform awan SDK untuk menulis data ke sistem sasaran, perhatikan kaedah menulis dan pemprosesan batch; 4. Cadangan Alat: Airflow, Dagster, Prefect digunakan untuk penjadualan dan pengurusan proses, menggabungkan penggera log dan persekitaran maya untuk meningkatkan kestabilan dan mengekalkan.

Contoh Data Python Pandas Styling Contoh Contoh Data Python Pandas Styling Contoh Aug 04, 2025 pm 01:43 PM

Menggunakan Pandasstyling dalam Jupyternotebook boleh mencapai paparan DataFrame yang indah. 1. Gunakan sorotan_max dan sorotan_min untuk menyerlahkan nilai maksimum (hijau) dan nilai minimum (merah) bagi setiap lajur; 2. Tambah warna latar belakang kecerunan (seperti blues atau merah) ke lajur angka melalui latar belakang_gradient untuk memaparkan saiz data secara visual; 3. Fungsi tersuai color_score digabungkan dengan applyMap untuk menetapkan warna teks untuk selang pecahan yang berbeza (≥90 hijau, 80 ~ 89 oren, 60 ~ 79 merah,

Jenis Bersyarat Lanjutan dalam TypeScript Jenis Bersyarat Lanjutan dalam TypeScript Aug 04, 2025 am 06:32 AM

Jenis Keadaan Lanjutan TypeScript Melaksanakan penghakiman logik antara jenis melalui Textendsu? X: Y Sintaks. Keupayaan terasnya ditunjukkan dalam jenis keadaan yang diedarkan, kesimpulan jenis kesimpulan dan pembinaan alat jenis kompleks. 1. Jenis bersyarat diedarkan dalam parameter jenis kosong dan secara automatik boleh memecah jenis bersama, seperti toarray untuk mendapatkan rentetan [] | number []. 2. Menggunakan Pengagihan untuk Membina Alat Penapisan dan Pengekstrakan: Tidak termasuk Kecualikan Jenis Melalui Textendsu? Tidak pernah: T, Ekstrak Ekstrak Persamaan melalui Textendsu? 3

Pintasan kod vs untuk memberi tumpuan kepada Panel Explorer Pintasan kod vs untuk memberi tumpuan kepada Panel Explorer Aug 08, 2025 am 04:00 AM

Di VSCode, anda boleh menukar kawasan panel dan penyuntingan dengan cepat melalui kekunci pintasan. Untuk melompat ke panel Explorer kiri, gunakan CTRL Shift E (Windows/Linux) atau CMD Shift E (MAC); Kembali ke kawasan penyuntingan untuk menggunakan Ctrl `atau ESC atau Ctrl 1 ~ 9. Berbanding dengan operasi tetikus, pintasan papan kekunci lebih cekap dan tidak mengganggu irama pengekodan. Petua lain termasuk: Kotak carian fokus Ctrl Kctrl e, fail menamakan semula F2, memadam fail, masukkan fail terbuka, arrow kunci memperluas/runtuh folder.

Tetap: Kemas kini Windows gagal dipasang Tetap: Kemas kini Windows gagal dipasang Aug 08, 2025 pm 04:16 PM

RuntheWindowsUpdateTroubleshooterviaSettings>Update&Security>Troubleshoottoautomaticallyfixcommonissues.2.ResetWindowsUpdatecomponentsbystoppingrelatedservices,renamingtheSoftwareDistributionandCatroot2folders,thenrestartingtheservicestocle

See all articles