mayoz / laravel-tokens
Laravel Auth 的多令牌支持。
Requires
- php: ^7.0.0
- illuminate/auth: ~5.5
- illuminate/contracts: ~5.5
- illuminate/http: ~5.5
- illuminate/queue: ~5.5
- illuminate/support: ~5.5
This package is auto-updated.
Last update: 2024-08-27 23:55:05 UTC
README
介绍
此包提供了一种简单的方法,为您的应用程序用户分配多个令牌。此解决方案类似于 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 流程类似
令牌守卫正在寻找令牌
- 首先查找 URL 参数
?api_token=XXX
- 如果不存在令牌,则在头部查找
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)。有关更多信息,请参阅 许可证文件