zmeno/humble

为Laravel提供无密码认证和详细会话

维护者

详细信息

github.com/zmeno/humble

源代码

dev-master 2024-02-09 00:14 UTC

This package is auto-updated.

Last update: 2024-09-09 01:44:57 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的特性添加到您的用户模型中

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

发布Humble的迁移(会话表)

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

运行迁移

php artisan migrate

在您的配置中更改保护者,到 config/auth.php 中的 'humble' 保护者,在我这个例子中,因为我主要使用Laravel作为API

    '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操作、CLI应用程序、Slack令牌等...

通过这些用户可以创建的附加会话令牌,您仍然可以访问会话 source,您可以根据该会话附加某些Gates & Policy行为。如果您对保留这些会话令牌并赋予与用户相同的访问权限感到满意,您可以保持不变。如果您需要更多粒度,您也可以分配权限。

使用权限,您可以设置这些会话令牌可以具有的特定规则。例如,您可能希望为GitHub操作创建一个会话令牌,它只能执行读取事件,而不能写入。

这些权限可以在您的应用程序中用户定义,这意味着您需要声明这些规则并在应用程序中进行检查/验证。默认权限设置为 ["*"],这意味着完全访问权限,但在创建会话时,您可以传递一个参数,仅将其设置为读取,并且您的数据库记录将显示为 ["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. $request->user()->tokenCan('write')

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

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

这也可以与 auth()->user()->createToken(...)$request->user()->createToken(...) 一起使用