yaquawa/laravel-passport-binary-uuid-adapter

此包使Laravel Passport能够使用二进制UUID。

v1.0.4 2018-10-11 02:59 UTC

This package is auto-updated.

Last update: 2024-08-29 04:03:43 UTC


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的数组来进一步指定,在这种情况下,用户提供者将尝试从不同的表中检索用户。当您希望为各种用户使用相同的端点时,这很有用。例如,如果您将UserAdmin模型类都提供给model键,它将首先尝试从其表找到User,如果找不到,则尝试使用相同的用户凭据从Admin表找到。

异常处理

此外,您应该在App\Exceptions\Handler类中覆盖Illuminate\Foundation\Exceptions\Handlercontext方法。这样,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 🤝。