acidjazz / humble
laravel 的无密码身份验证和详细会话
Requires
- php: ^8.1
- illuminate/support: 9.*|10.*|11.*
- torann/geoip: ^3.0
- whichbrowser/parser: ^2.1
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
- dev-master
- v3.2.0
- v3.1.1
- v3.1.0
- v3.0.0
- v2.1.5
- v2.1.4
- v2.1.3
- v2.1.2
- v2.1.1
- v2.1.0
- v2.0.15
- v2.0.14
- v2.0.13
- v2.0.12
- v2.0.11
- v2.0.10
- v2.0.9
- v2.0.8
- v2.0.7
- v2.0.6
- v2.0.5
- v2.0.4
- v2.0.3
- v2.0.2
- v2.0.1
- v2.0.0
- v1.1.0
- v1.0.30
- v1.0.25
- v1.0.24
- v1.0.23
- v1.0.22
- v1.0.21
- v1.0.20
- v1.0.19
- v1.0.18
- v1.0.17
- v1.0.16
- v1.0.15
- v1.0.14
- v1.0.13
- v1.0.12
- v1.0.11
- v1.0.10
- v1.0.9
- v1.0.8
- v1.0.7
- v1.0.6
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
This package is auto-updated.
Last update: 2024-09-25 06:47:07 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 的 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)检查/验证权限的其他方法
auth()->user()->tokenCan('write')
auth()->session()->can('write')
$user()->tokenCan('write')
检查用户是否具有'write'权限:$request->user()->tokenCan('write')
我们还提供了一个简单的方法来使用以下方法创建新的会话令牌:
$user->createToken('action', ['write'])
这也可以与以下任一方法一起使用:
auth()->user()->createToken(...)
或$request->user()->createToken(...)