acidjazz/humble

laravel 的无密码身份验证和详细会话

v3.2.0 2024-04-25 06:01 UTC

README

Laravel 的理想会话和身份验证

Packagist License Latest Stable Version Total Downloads

特性

  • 无密码身份验证
    • 存储和比较cookie的能力,以保护发送的魔法链接
    • 链接过期
    • 存储通过 "action" 对象传递以完成用户之前正在执行的任务的能力
  • 使用 whichbrowser 进行详细会话
"device": {
  "string": "Chrome 68 on a Google Pixel 2 XL running Android 9",
  "platform": "Android 9",
  "browser": "Chrome 68",
  "name": "Google Pixel 2 XL",
  "desktop": false,
  "mobile": true
}
  • 使用 lyften 的适配器进行详细位置信息,适配 GeoIP2
"location": {
  "ip": "86.222.88.167",
  "country": "France",
  "city": "Lons",
  "state": "NAQ",
  "postal_code": "64140",
  "lat": 43.3167,
  "lon": -0.4,
  "timezone": "Europe\/Paris",
  "currency": "EUR"
}

安装

使用 composer 安装 humble

composer require acidjazz/humble

将 Humble 的 trait 添加到您的用户模型中

use Fumeapp\Humble\Traits\Humble;
...
class User extends Authenticatable
{
  use Humble, Notifiable;
}

发布 Humble 的迁移(会话表)

php artisan vendor:publish --tag="humble.migrations"

运行迁移

php artisan migrate

在您的配置中更改 guard,将 config/auth.php 中的 'humble' guard 替换为您的 guard,例如,由于我主要使用 Laravel 作为 API,我使用的是 'humble' guard

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'humble',
            'provider' => 'users',
        ],
    ],

检查您的默认设置,如果不是 API,您需要更改它

如果您的用户类不是 App\Models\User,我们需要告诉 humble 它是什么

发布 Humble 的配置

 php artisan vendor:publish --tag="humble.config"

修改 config/humble.php 并指定您的用户类

使用

Humble 与 Laravel Sanctum 类似,您还可以为会话分配权限。

Humble 会话主要存储用于用户会话,默认情况下会继承所有会话权限。您也可以将 Humble 会话视为个人访问令牌,在您的应用程序中,您的用户可以为各种服务和集成(如:GitHub actions、CLI应用程序、Slack 令牌等)创建多个会话令牌。

有了这些额外的会话令牌,您的用户仍然可以访问会话 source,您可以根据它附加某些 Gates & Policy 行为。如果您对这些会话令牌的访问权限与用户相同,可以保持原样。如果需要更细粒度的权限,也可以分配权限。

使用权限,您可以额外设置这些会话令牌可以具有的特定规则。例如,您可能希望为 GitHub action 创建一个会话令牌,它只能执行 READ 事件,而不能执行 WRITE。

这些权限可以在您的应用程序中用户定义,这意味着您需要自己声明这些规则,并在应用程序中进行检查/验证。默认权限设置为 ["*"],这意味着完全访问权限,但在创建会话时,您可以传递一个参数,仅将其设置为 READ,而您的数据库记录将显示为 ["READ"]

为了验证这些权限,我们提供了一些辅助器和中间件,以简化此过程。

要验证中间件级别,您首先需要在 app/Http/Kernel.php 中的 $routeMiddleware 添加以下内容

// ...
'abilities' => \Fumeapp\Humble\Http\Middleware\CheckAbilities::class,
'ability' => \Fumeap\Humble\Http\Middleware\CheckForAnyAbility::class,
// ...

添加这些后,您可以在路由中间件中应用它们,如下所示

Route::get('admin', function () {
    return response()->json([
        'success' => true
    ]);
})->middleware(['auth:api', 'ability:admin']);

如果该会话令牌具有以下权限: ["*"]["admin"],则示例会通过

您还可以使用 abilities 作为中间件,这是一个必须具有所有给定权限的严格检查。

在您的应用程序的其他区域(如 Gates & Policies)检查/验证权限的其他方法

  1. auth()->user()->tokenCan('write')
  2. auth()->session()->can('write')
  3. $user()->tokenCan('write')
  4. 检查用户是否具有'write'权限:$request->user()->tokenCan('write')

我们还提供了一个简单的方法来使用以下方法创建新的会话令牌:

 $user->createToken('action', ['write'])

这也可以与以下任一方法一起使用:auth()->user()->createToken(...)$request->user()->createToken(...)