p1613m/laravel-tokens

Laravel Auth的多令牌支持。

dev-master 2020-04-26 12:07 UTC

This package is auto-updated.

Last update: 2024-09-09 20:10:02 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以获取详细信息。

安全漏洞

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

许可证

MIT许可证(MIT)。请参阅许可证文件以获取更多信息。