zmeno / humble
为Laravel提供无密码认证和详细会话
Requires
- php: ^8.1
- illuminate/support: 9.*|10.*|11.*
- whichbrowser/parser: ^2.1
- zmeno/geoip: *
Requires (Dev)
- laravel/pint: ^1.1.1
- mockery/mockery: ^1.4.4
- nunomaduro/collision: ^7.0
- orchestra/testbench: ^7.0|^8.0
- phpunit/phpunit: ^8.0|^9.3|^10.0
This package is auto-updated.
Last update: 2024-09-09 01:44:57 UTC
README
Laravel的理想会话和认证
特性
- 无密码认证
- 存储和比较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 }
"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中检查/验证权限的其他方式
auth()->user()->tokenCan('write')
auth()->session()->can('write')
$user()->tokenCan('write')
$request->user()->tokenCan('write')
我们还提供了一种简单的方法来使用以下方式创建新的会话令牌
$user->createToken('action', ['write'])
这也可以与
auth()->user()->createToken(...)
或$request->user()->createToken(...)
一起使用