rcerljenko / laravel-jwt
针对 Laravel PHP 框架的简单 JWT 身份验证
2.1.0
2023-05-21 17:34 UTC
Requires
- php: ^8.0
- firebase/php-jwt: ^6.1
- illuminate/auth: ^9.0
- illuminate/contracts: ^9.0
- illuminate/support: ^9.0
Requires (Dev)
README
使用 Firebase JWT(https://github.com/firebase/php-jwt)作为底层,为 Laravel PHP 框架提供简单 JWT 身份验证。
安装
标准的 Composer 包安装
composer require rcerljenko/laravel-jwt -v
用法
- 发布配置文件。这将创建一个
config/jwt.php
文件以进行基本配置选项。
php artisan vendor:publish --provider="RCerljenko\LaravelJwt\LaravelJwtServiceProvider" --tag="config"
- 使用
jwt
驱动在您的身份验证配置文件中添加一个新的身份验证保护器。
// config/auth.php 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'jwt', 'provider' => 'users', ], ],
- 使用这个新的保护器保护您的 API 路由。
// routes/api.php use Illuminate\Support\Facades\Route; Route::middleware('auth:api')->group(function () { // JWT protected routes });
- 在您的身份验证模型(例如 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' ] ]);
您不需要覆盖所有配置选项,只需更改您希望更改的选项即可。
请求
令牌以三种方式之一从请求中提取
- 从
Authorization: Bearer {token}
标头(最常见)。 - 从 URL 查询参数
token
。 - 使用
token
字段名从请求负载中提取。 - 使用
token
键从 cookie 中提取。