yaquawa/laravel-passport-binary-uuid-adapter
此包使Laravel Passport能够使用二进制UUID。
Requires
- php: >=7.1.3
- laravel/passport: ^6.0|^7.0
- ramsey/uuid: ^3.7
README
默认情况下,Passport不支持使用二进制UUID。
此包作为适配器,允许Passport使用二进制UUID。
注意:此包假定您正在使用ramsey/uuid生成UUID。
使用方法
首先,通过Composer引入此包。
composer require yaquawa/laravel-passport-binary-uuid-adapter
此包将在Passport make之前绑定一些Passport类。
因此,为了使其正常工作,此包必须在Passport的服务提供者之前加载。
要确保此包的服务提供者在Passport的服务提供者之前加载,在您的应用程序的composer.json文件的extra部分,将passport添加到dont-discover列表中。
"extra": {
"laravel": {
"dont-discover": [
"laravel/passport"
]
}
}
然后手动将Laravel\Passport\PassportServiceProvider::class添加到config/app.php中的providers。
最后,将您的用户提供者更改为eloquent_with_binary_uuid在您的config/auth.php。
'providers' => [
'users' => [
'driver' => 'eloquent_with_binary_uuid',
'model' => App\Models\User::class,
]
]
此外,您可以通过指定包含model的数组来进一步指定,在这种情况下,用户提供者将尝试从不同的表中检索用户。当您希望为各种用户使用相同的端点时,这很有用。例如,如果您将User和Admin模型类都提供给model键,它将首先尝试从其表找到User,如果找不到,则尝试使用相同的用户凭据从Admin表找到。
异常处理
此外,您应该在App\Exceptions\Handler类中覆盖Illuminate\Foundation\Exceptions\Handler的context方法。这样,userId就可以以正常UUID的形式输出。
namespace App\Exceptions; use Exception; use Illuminate\Support\Facades\Auth; use Yaquawa\Laravel\PassportBinaryUuidAdapter\Helper; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; class Handler extends ExceptionHandler { /** * Get the default context variables for logging. * * @return array */ protected function context() { try { $userId = Auth::id(); if ($userId) { $userId = Helper::decodeUuid($userId); } return array_filter([ 'userId' => $userId, 'email' => Auth::user() ? Auth::user()->email : null, ]); } catch (Throwable $e) { return []; } } }
贡献
我不确定Laravel未来是否会允许我们使用二进制UUID。因此,我会尽快将此包与Laravel和Passport的最新版本对齐。如果您发现任何问题,请随时发送PR 🤝。