fherryfherry / laravel-api-token
在 Laravel 中为 API 创建标记从未如此简单
Requires
- php: ^7.4|^8.0
Requires (Dev)
- laravel/framework: ^6.0|^7.0|^8.0
This package is auto-updated.
Last update: 2024-08-27 14:53:29 UTC
README
这个库旨在轻松标记您当前的 API Restful。它使您的 API 更安全。
这个库是如何工作的
- 它将创建名为
laravel_api_tokens
的表 - 将标记数据插入其中
- 使用表
laravel_api_tokens
验证用户请求
要求
- Laravel 6, 7 或 8
- PHP 7.4 或 8.x
安装
在您的根项目中运行此命令
composer require fherryfherry/laravel-api-token
运行以下迁移
php artisan migrate
安装完成后,然后运行以下命令以导出配置文件
php artisan vendor:publish --provider=FherryFherry\LaravelApiToken\LaravelSimpleApiTokenServiceProvider
配置
<?php return [ "expiry_unit"=> "day", // day, hour, minute "expiry_duration" => 3, // expiry duration by unit "token_length"=> 128, // how long token is // VALIDATION LEVEL ============================================ // // Level 1 = Validate by token only (default) // // Level 2 = Validate by token and ip address // // Level 3 = Validate by token, ip address and user agent // // // // Please be careful with validation 2 and 3 because ip address // // can suddenly change. Usually this because user providers // // ============================================================= // "validation_level"=> 1, "basic_auth_user" => env("BASIC_AUTH_USER"), // user to request token "basic_auth_pass" => env("BASIC_AUTH_PASS") // password to request token ];
设置 .ENV
打开 .env
文件,并将以下内容粘贴到文件底部
BASIC_AUTH_USER="example" BASIC_AUTH_PASS="123456"
您可以更改其值。
将用户数据保存到令牌中
您应该创建自己的登录 API。登录成功后,您可以调用此辅助函数。首先,将以下内容添加到类的顶部
use FherryFherry\LaravelApiToken\Helper\LaravelSimpleApiToken;
然后,在您的登录方法中将是这样的
public function postLogin(Request $request) { // ... if(Auth::attempt($request->except("_token"))) { // Then after that call this helper LaravelSimpleApiToken::saveLoginData($request, $user->id, $user->name); // Or if you have a role LaravelSimpleApiToken::saveLoginData($request, $user->id, $user->name, $user->role); } // ... }
请求令牌端点
将此端点提供给您的前端工程师。(我假设您使用 artisan serve,如果需要,请调整基本域)
https://:8080/api/auth/request-token
添加带有 Basic Authorization 的头参数。
如何使用 Basic Authorization,您可以参考此文档。https://mdn.org.cn/en-US/docs/Web/HTTP/Headers/Authorization
此 API 将生成以下内容
{ "status": 1, "message": "success", "data": { "expired_at": "2013-05-05T16:34:42+00:00", "access_token": "bG9yZW0gaXBzdW0=", "refresh_token": "bG9yZW0gaXBzdW0=" } }
前端工程师应该保存 expired_at
、access_token
、refresh_token
的值。
刷新令牌端点
此 API 用于扩展 access_token
的过期时间,无需再次请求令牌。但是,您将获得新的 access_token
、refresh_token
、expired_at
。与请求令牌不同的是,您无需再次调用登录 API。
https://:8080/api/auth/refresh-token
前端工程师需要添加带有 Bearer Authorization 的 Header Parameter
Authorization: Bearer {access_token}
此 API 将生成以下内容
{ "status": 1, "message": "success", "data": { "expired_at": "2013-05-05T16:34:42+00:00", "access_token": "bG9yZW0gaXBzdW0=", "refresh_token": "bG9yZW0gaXBzdW0=" } }
前端工程师应该保存 expired_at
、access_token
、refresh_token
的值。用于下一次头部授权。
使用令牌保护您的 API
为了防止任何用户在没有令牌的情况下调用您的 API,因此您必须将 laravel_api_token
中间件添加到您的 API 路由中。打开您的 API 路由位置(我假设您使用 routes/api.php)
Route::middleware(['api','laravel_api_token'])->group(function() { // place your all api routes here // ... });
前端工程师需要添加带有 Bearer Authorization 的 Header Parameter
Authorization: Bearer {access_token}
获取当前用户 ID
如果您想获取当前用户 ID,只需调用此辅助函数即可
$currentUserID = LaravelSimpleApiToken::getUserId();
获取当前用户名
如果您想获取当前用户名,只需调用此辅助函数即可
$currentUserName = LaravelSimpleApiToken::getUserName();
获取当前用户角色
如果您想获取当前用户角色,只需调用此辅助函数即可
$currentUserRole = LaravelSimpleApiToken::getUserRole();
获取令牌数据
出于某种原因,有时您想查看当前令牌的所有可用列值,您可以调用此辅助函数
$tokenData = LaravelSimpleApiToken::getTokenData();
销毁令牌
如果用户正在注销,您必须在您的注销方法中调用此辅助函数。因此,前端应该再次调用请求令牌 API。
LaravelSimpleApiToken::destroy($request);
支持 & 捐赠
嗨,感谢您使用我的开源项目,您可以通过: https://saweria.co/ferryariawan 或通过 https://buymeacoffee.com/ferryariawan 来支持我
安全问题
如果您发现任何安全问题,请通过 ferdevelop15[at]gmail.com 联系我