ryangjchandler / bearer
Laravel API端点的最小化基于令牌的认证。
Requires
- php: ^8.2
- illuminate/contracts: ^11.0
- illuminate/database: ^11.0
- illuminate/http: ^11.0
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- brianium/paratest: ^7.4
- nunomaduro/collision: ^8.0
- orchestra/testbench: ^9.0
- phpunit/phpunit: ^10.5
- spatie/laravel-ray: ^1.32
README
Laravel API端点的最小化基于令牌的授权。
安装
您可以通过Composer安装此包
composer require ryangjchandler/bearer
您可以使用以下命令发布和运行迁移
php artisan vendor:publish --provider="RyanChandler\Bearer\BearerServiceProvider" --tag="bearer-migrations" php artisan migrate
您可以使用以下命令发布配置文件
php artisan vendor:publish --provider="RyanChandler\Bearer\BearerServiceProvider" --tag="bearer-config"
用法
创建令牌
要创建新令牌,您可以使用RyanChandler\Bearer\Models\Token
模型。
use RyanChandler\Bearer\Models\Token; $token = Token::create([ 'token' => Str::random(32), ]);
或者,您可以使用RyanChandler\Bearer\Facades\Bearer
外观来生成
令牌。
use RyanChandler\Bearer\Facades\Bearer; $token = Bearer::generate(domains: [], expiresAt: null);
默认情况下,Bearer使用按时间排序的UUID作为令牌字符串。您可以通过将Closure
传递给Bearer::generateTokenUsing
来修改此行为。此函数必须返回一个字符串以存储到数据库中。
use RyanChandler\Bearer\Facades\Bearer; Bearer::generateTokenUsing(static function (): string { return (string) Str::orderedUuid(); });
检索Token实例
要从token字符串检索Token实例,您可以使用RyanChandler\Bearer\Facades\Bearer
外观。
use RyanChandler\Bearer\Facades\Bearer; $token = Bearer::find('my-token-string');
在请求中使用令牌
Bearer使用请求的Authorization
头部来检索令牌实例。您应该这样格式化
Authorization: Bearer my-token-string
验证令牌
要验证令牌,请将RyanChandler\Bearer\Http\Middleware\VerifyBearerToken
中间件添加到您的API路由中。
use RyanChandler\Bearer\Http\Middleware\VerifyBearerToken; Route::get('/endpoint', MyEndpointController::class)->middleware(VerifyBearerToken::class);
令牌过期
如果您希望令牌在特定时间过期,您可以使用expires_at
列。
$token = Bearer::find('my-token-string'); $token->update([ 'expires_at' => now()->addWeek(), ]);
或者直接使用类的辅助方法。
$token = Bearer::find('my-token-string'); $token->addWeeks(1)->save();
如果您在此时间后尝试使用令牌,它将返回一个错误。
将令牌限制在特定域
令牌的使用可以限制在特定域。Bearer使用请求的方案和主机来决定令牌是否有效。
$token = Bearer::find('my-token-string'); $token->update([ 'domains' => [ 'https://laravel.net.cn', ], ]);
如果您尝试从除https://laravel.net.cn
之外的其他域使用此令牌,它将失败并中止。
注意:域名检查包括方案,因此如果需要,请确保同时添加HTTP和HTTPS的情况。
测试
composer test
贡献
有关详细信息,请参阅CONTRIBUTING。
安全漏洞
请审查我们关于如何报告安全漏洞的安全策略。
鸣谢
许可
MIT许可证(MIT)。有关更多信息,请参阅许可文件。