Rumah > rangka kerja php > Laravel > teks badan

Mari kita bincangkan tentang punca dan penyelesaian pelaporan ralat token laravel

PHPz
Lepaskan: 2023-04-06 17:09:43
asal
1881 orang telah melayarinya

Dengan perkembangan teknologi Internet, semakin banyak tapak web menggunakan seni bina pemisah bahagian hadapan dan belakang. Dalam seni bina ini, hujung depan dan belakang berkomunikasi melalui antara muka API. Walau bagaimanapun, apabila menggunakan rangka kerja Laravel untuk membangunkan antara muka API, sesetengah pengguna akan menghadapi ralat Token. Artikel ini akan memperkenalkan punca dan penyelesaian kepada masalah ini.

Sebab ralat Token

Dalam Laravel, ia adalah cara yang sangat biasa untuk menggunakan Token untuk mengesahkan identiti pengguna dalam antara muka API. Mekanisme pengesahan terbina dalam dalam rangka kerja Laravel termasuk operasi Token, tetapi jika ia tidak dikonfigurasikan dengan betul, ia akan menyebabkan ralat Token.

Secara umumnya, ralat Token mungkin berlaku dalam dua situasi berikut:

  1. Token tamat tempoh

Token menggunakan kaedah yang dipanggil JWT (JSON Web Token) teknologi, yang merupakan mekanisme pengesahan identiti ringan berdasarkan format JSON. Dalam rangka kerja Laravel, tempoh sah token ialah 1 jam secara lalai. Jika Token digunakan selepas masa tamat tempoh, ralat tamat tempoh Token akan dikembalikan.

  1. Pengesahan token gagal

Apabila Token tidak sah digunakan atau tiada Token diberikan, ralat kegagalan pengesahan Token akan dikembalikan.

Penyelesaian

Seterusnya, kami akan memperkenalkan beberapa kaedah untuk menyelesaikan ralat Token.

  1. Melanjutkan tempoh sah Token

Melanjutkan tempoh sah Token ialah penyelesaian yang agak mudah. Dalam Laravel, mengubah suai tempoh sah Token perlu dikonfigurasikan dalam fail config/jwt.php. Buka fail ini dan ubah suai parameter TTN_TTL kepada tempoh sah yang diperlukan.

  1. Memperkenalkan perpustakaan kelas yang berkaitan

Dalam Laravel, terdapat beberapa perpustakaan kelas yang boleh membantu kami menangani isu berkaitan Token. Contohnya, spatie/laravel-jwt, tymon/jwt-auth, dsb., perpustakaan ini menyediakan penyelesaian yang sangat mudah.

Di bawah, mengambil spatie/laravel-jwt sebagai contoh, kami akan menerangkan cara menggunakan kaedah dalam perpustakaan kelas untuk mengendalikan pelaporan ralat Token.

Mula-mula, perkenalkan spatie/laravel-jwt ke dalam projek:

composer require spatie/laravel-jwt

Kemudian, terbitkan fail konfigurasi:

php artisan vendor:publish --provider="SpatieJwtJwtServiceProvider"

Seterusnya, daftarkan pengawal pengesahan yang sepadan dengan JwtAuthGuard dalam fail AuthServiceProvider.php:

public function boot()
{
    $this->registerPolicies();

    Auth::extend('jwt', function ($app, $name, array $config) {
        return new JwtAuthGuard($app[GuardHelper::class], $app['request']);
    });
}
Salin selepas log masuk

Akhir sekali, konfigurasikannya dalam fail config/auth.php:

'guards' => [
    'api' => [
        'driver' => 'jwt',
        'provider' => 'users',
    ],
],
Salin selepas log masuk

Dengan cara ini, anda boleh menggunakan Auth::guard('api')->user() untuk mendapatkan maklumat pengguna yang sepadan dengan Token.

  1. Perisian tengah tersuai

Akhir sekali, anda juga boleh menyelesaikan masalah pelaporan ralat Token dengan menyesuaikan perisian tengah. Menyesuaikan perisian tengah dalam Laravel adalah sangat mudah, anda hanya perlu menciptanya melalui arahan artisan.

Sebelum anda mula mencipta perisian tengah, terdapat prasyarat: anda mesti mempunyai pemahaman tentang proses pelaksanaan perisian tengah Laravel. Ringkasnya, aliran pelaksanaan perisian tengah Laravel adalah seperti berikut:

Middleware 1 - (如果存在)Middleware 2 - (如果存在)Middleware 3 - Controller
Salin selepas log masuk

Secara terang-terangan, ia adalah struktur tindanan. Sebelum melaksanakan kaedah Pengawal, anda boleh menulis logik pengesahan Token tersuai dalam perisian tengah. Jika pengesahan Token gagal, kembalikan mesej ralat secara langsung.

Berikut ialah contoh:

namespace App\Http\Middleware;

use Closure;
use Illuminate\Contracts\Auth\Factory as AuthFactory;

class TokenAuth
{
    protected $auth;

    public function __construct(AuthFactory $auth)
    {
        $this->auth = $auth;
    }

    public function handle($request, Closure $next)
    {
        try {
            $user = $this->auth->guard('api')->user();
        } catch (\Throwable $e) {
            return response()->json(['error' => 'Token 认证失败'], 401);
        }

        if (!$user) {
            return response()->json(['error' => 'Token 非法'], 401);
        }

        return $next($request);
    }
}
Salin selepas log masuk

Dalam laluan pengawal, hanya gunakan perisian tengah:

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});
Salin selepas log masuk

Dengan cara ini, apabila mengakses laluan di atas , Perisian tengah tersuai TokenAuth akan dilaksanakan terlebih dahulu Jika pengesahan Token gagal, mesej ralat akan dikembalikan.

Ringkasan

Pelaporan ralat token adalah masalah yang agak biasa, tetapi selagi anda memahami puncanya, anda boleh mengambil langkah yang sesuai untuk menyelesaikannya. Artikel ini memperkenalkan cara melanjutkan tempoh sah Token, memperkenalkan perpustakaan kelas berkaitan dan menyesuaikan perisian tengah untuk menyelesaikan masalah pelaporan ralat Token. Kaedah ini agak praktikal, dan pembangun boleh memilih kaedah yang sesuai dengan mereka mengikut situasi sebenar mereka.

Atas ialah kandungan terperinci Mari kita bincangkan tentang punca dan penyelesaian pelaporan ralat token laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan