rcerljenko/laravel-jwt

针对 Laravel PHP 框架的简单 JWT 身份验证

2.1.0 2023-05-21 17:34 UTC

This package is auto-updated.

Last update: 2024-09-21 20:28:16 UTC


README

使用 Firebase JWT(https://github.com/firebase/php-jwt)作为底层,为 Laravel PHP 框架提供简单 JWT 身份验证。

安装

标准的 Composer 包安装

composer require rcerljenko/laravel-jwt -v

用法

  1. 发布配置文件。这将创建一个 config/jwt.php 文件以进行基本配置选项。
php artisan vendor:publish --provider="RCerljenko\LaravelJwt\LaravelJwtServiceProvider" --tag="config"
  1. 使用 jwt 驱动在您的身份验证配置文件中添加一个新的身份验证保护器。
// config/auth.php

'guards' => [
	'web' => [
		'driver' => 'session',
		'provider' => 'users',
	],

	'api' => [
		'driver' => 'jwt',
		'provider' => 'users',
	],
],
  1. 使用这个新的保护器保护您的 API 路由。
// routes/api.php

use Illuminate\Support\Facades\Route;

Route::middleware('auth:api')->group(function () {
	// JWT protected routes
});
  1. 在您的身份验证模型(例如 User)上使用该包提供的 HasJwt 特性。
namespace App\Models;

use RCerljenko\LaravelJwt\Traits\HasJwt;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
	use Notifiable, HasJwt;
}

现在您有权访问 User 模型上的 token() 方法,例如

$user = User::findOrFail(1);
$user->token();

您可能需要通过登录控制器或用户资源返回此令牌。

配置

在发布配置后,此包通过 config/jwt.php 文件提供简单的配置。让我们了解一下每个配置选项。

  • secret-key - 编码/解码令牌时使用的密钥。它应该是一个随机字符串。请记住,如果您更改此密钥,所有活动的 JWT 令牌都将无效。
  • hash-algo - 哈希算法。支持算法的列表在配置文件中。您可能不需要更改此设置。
  • expiration - 默认令牌过期时间(分钟)。您可以将其设置为 null,使令牌永不过期。
  • claims - 将应用于所有令牌的默认声明(除了解码和验证所需之外)。

这是所有令牌的全局配置。除了这些,库还提供了通过 HasJwt 特性辅助方法提供的模型本地配置。

  • getJwtId() - 应返回用于从数据库检索该模型的模型唯一键。默认为主键。
  • getJwtValidFromTime() - 应返回 null(默认)或 Carbon 实例。如果您想创建非立即激活的令牌,可以使用它。
  • getJwtValidUntilTime() - 应返回 null 或 Carbon 实例。这将设置 JWT 过期时间,默认情况下使用配置文件中的 expiration 选项。
  • getJwtCustomClaims() - 应返回一个键/值数组,其中包含您想要成为令牌一部分的额外自定义声明。默认为空数组。

您还可以直接在 token() 方法上使用配置,然后覆盖所有其他配置,例如

$user->token([
	'id' => $user->email,
	'valid_from' => now()->addHour(),
	'valid_until' => now()->addDay(),
	'claims' => [
		'extra1' => 'foo',
		'extra2' => 'bar'
	]
]);

您不需要覆盖所有配置选项,只需更改您希望更改的选项即可。

请求

令牌以三种方式之一从请求中提取

  1. Authorization: Bearer {token} 标头(最常见)。
  2. 从 URL 查询参数 token
  3. 使用 token 字段名从请求负载中提取。
  4. 使用 token 键从 cookie 中提取。