aikrof/jwt-auth

为 Laravel 简单的 JSON Web Token 认证

1.0.0 2019-11-11 15:37 UTC

This package is auto-updated.

Last update: 2024-09-27 22:15:34 UTC


README

1. 安装

composer require aikrof/jwt-auth

2. 添加服务提供者

将服务提供者添加到 config/app.php 配置文件中的 providers 数组

'providers' => [
    ...
    Aikrof\JwtAuth\Providers\JwtServiceProvider::class,
    ...
],

3. 发布配置文件

php artisan vendor:publish --provider="Aikrof\JwtAuth\Providers\JwtServiceProvider"

此命令将创建带有基本配置的 config/jwt.php 文件。

4. 迁移表

创建存储无效令牌的表。

php artisan migrate

5. 生成密钥

php artisan create:secret

此命令将在您的 .env 文件中创建 JWT_SECRET_KEY 和 JWT_REFRESH_KEY。

6. 配置认证保护器

config/auth.php 文件内部

    'defaults' => [
        'guard' => 'api',
        'passwords' => 'users',
    ],
    ...
    'guards' => [
        ...
        'api' => [
            'driver' => 'jwt',
            'provider' => 'users',
        ],
    ],

api 保护器设置为默认保护器,并将 jwt 驱动器添加到 api 保护器

7. 更新您的用户模型

trait 添加到您的用户模型
1) 实现 Aikrof\JwtAuth\JwtCreator
2) 然后添加 trait use JwtCreator

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Aikrof\JwtAuth\JwtCreator;

class User extends Authenticatable
{
    use JwtCreator, Notifiable;
    
    ....
}

8. 使用方法

1) 设置令牌存活时间
1. 设置令牌存活时间

默认令牌存活时间(ttl)为 1 周,您可以在 config/jwt.php 文件中或创建新令牌时更改 ttl

Auth::user()->setTtl(2);

示例:将令牌存活时间设置为 2 分钟。
setTtl() - 接受以分钟为单位的参数。

1. 设置刷新令牌存活时间

默认刷新令牌存活时间为 token ttl * 2,您可以在 config/jwt.php 文件中或创建新令牌时更改 refreshTtl

Auth::user()->setRefreshTtl(4);

示例:将令牌存活时间设置为 4 分钟。
setRefreshTtl() - 接受以分钟为单位的参数。

2) 创建 JWT 令牌和刷新令牌
Auth::token();

或者使用 setTtl() 或 setRefreshTtl()

Auth::user()->setTtl(2)->setRefreshTtl()->token();

将返回包含以下字段的数组

[
    'token' => '...',
    'refresh' => '...'
]
3) 获取令牌存活时间
1. 获取以分钟为单位的令牌存活时间
Auth::user()->getTtl();

获取以 UNIX 时间戳为单位的令牌存活时间

Auth::user()->getExpTtl();
2. 获取以分钟为单位的刷新令牌存活时间
Auth::user()->getRefreshTtl();

获取以 UNIX 时间戳为单位的刷新令牌存活时间

Auth::user()->getRefreshExpTtl();
4) 用户登出

登出用户 - 这将使当前令牌无效并取消已认证用户的设置。

Auth::logout();
刷新 JWT 令牌

刷新令牌,这将使当前令牌无效并返回新的令牌和刷新令牌。

Auth::refresh();

如果 JWT 令牌无效或包含无效数据,则将返回 null