mayoz/laravel-tokens

Laravel Auth 的多令牌支持。

v1.0.1 2018-02-24 22:55 UTC

This package is auto-updated.

Last update: 2024-08-27 23:55:05 UTC


README

Latest Version on Packagist Software License Quality Score StyleCI Total Downloads

介绍

此包提供了一种简单的方法,为您的应用程序用户分配多个令牌。此解决方案类似于 Laravel 的 TokenGuard 类。

此包适用于 Laravel 5.5 及以上版本。

安装

您可以通过 composer 安装此包

composer require mayoz/laravel-tokens

服务提供者将自动注册到 Laravel 5.5 及以上版本。如果您愿意,可以将服务提供者添加到 config/app.php 文件

'providers' => [
    // ...
    Mayoz\Token\TokenServiceProvider::class,
];

如果您打算更改默认迁移,可以使用以下命令发布 migration 文件

php artisan vendor:publish --provider="Mayoz\Token\TokenServiceProvider" --tag="laravel-tokens-migrations"

然后,您可以通过运行迁移来创建 tokens

php artisan migrate

您可以使用以下命令发布配置文件

php artisan vendor:publish --provider="Mayoz\Token\TokenServiceProvider" --tag="laravel-tokens-config"

如果您需要,可以自由更改您的 config 文件。

实现

安装后,您可以为您的应用程序实现新功能。

Mayoz\Token\HasToken 特性添加到您的 App\User 模型中。此特性将为您的模型提供一些辅助方法,允许您检查认证用户的令牌

<?php

namespace App;

use Mayoz\Token\HasToken;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use HasToken, Notifiable;
    
    // ...
}

最后,您将为应用程序添加新的守卫。打开 config/auth.php 文件并应用以下更改

  'guards' => [
        // ...

        'api' => [
            'driver' => 'multi-token',
            'provider' => 'tokens',
        ],
    ],

    'providers' => [
        // ...

        'tokens' => [
            'driver' => 'eloquent',
            'model' => Mayoz\Token\Token::class,
        ],
    ],

恭喜!

用法

当您需要时(登录后或之后的任何操作),请使用辅助函数创建新的令牌。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class TokenController
{
     public function __invoke(Request $request)
     {
         $token = $request->user()->generateToken();
         
         return $token;
     }
}

默认情况下,如果未传递生命周期,令牌不会过期。为了定义过期时间,您可以在 generateToken 方法中传递时间长度参数(以分钟为单位)。

使用以下命令生成寿命为 10 分钟的新令牌

$token = $request->user()->generateToken(10);

令牌不会刷新,令牌过期后将会失效。使用过期令牌的认证尝试将失败。

认证过程与标准的 Laravel api_token 流程类似

令牌守卫正在寻找令牌

  1. 首先查找 URL 参数 ?api_token=XXX
  2. 如果不存在令牌,则在头部查找 Authorization: Bearer XXX

最后,如果您需要在认证过程中使用当前令牌模型信息,可以使用 token 方法。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController
{
     public function __construct()
     {
          $this->middleware('auth:api');
     }
     
     public function __invoke(Request $request)
     {
         return [
             'user' => $request->user(),
             'token' => $request->token(),
         ];
     }
}

令牌生成器

默认情况下,生成的令牌是随机 36 个字符的字符串。如果您想创建更有意义的令牌(例如 uuid4),您可以自由更改生成方法。

让我们将生成器改为 uuid4 字符串。打开 app/Providers/AuthServiceProvider 文件并应用以下更改

<?php

namespace App\Providers;

use Mayoz\Token\Generator;
// ...

class AuthServiceProvider extends ServiceProvider
{
    // ...

    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        // ...

        Generator::extend(function () {
            return \Ramsey\Uuid\Uuid::uuid4()->toString();
        });
    }
}

如果您的应用程序中没有 ramsey/uuid 包,您可以安装它

composer require ramsey/uuid

干杯。

变更日志

有关最近更改的更多信息,请参阅 CHANGELOG

贡献

有关详细信息,请参阅 CONTRIBUTING

安全漏洞

如果您发现任何与安全相关的问题,请使用“错误”标签创建新的问题。所有安全漏洞都将得到及时解决。

许可证

MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件