fherryfherry/laravel-api-token

在 Laravel 中为 API 创建标记从未如此简单

v1.2.1 2021-08-27 06:57 UTC

This package is auto-updated.

Last update: 2024-08-27 14:53:29 UTC


README

这个库旨在轻松标记您当前的 API Restful。它使您的 API 更安全。

这个库是如何工作的

  1. 它将创建名为 laravel_api_tokens 的表
  2. 将标记数据插入其中
  3. 使用表 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_ataccess_tokenrefresh_token 的值。

刷新令牌端点

此 API 用于扩展 access_token 的过期时间,无需再次请求令牌。但是,您将获得新的 access_tokenrefresh_tokenexpired_at。与请求令牌不同的是,您无需再次调用登录 API。

https://:8080/api/auth/refresh-token

前端工程师需要添加带有 Bearer AuthorizationHeader 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_ataccess_tokenrefresh_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 AuthorizationHeader 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 联系我