Laravel vapor "This action is unauthorized" 带文件上传

Laravel vapor "This action is unauthorized" with file upload

我已经使用 Sanctum 为我的 RESTFull 应用设置了 Laravel Vapor,现在我只是想上传一个文件。我正在发出请求 POST /vapor/signed-storage-url,我得到:

{
    "message": "This action is unauthorized.",
    ...
}

我已经按照 docs 中的描述创建了 UserPolicy

class UserPolicy 
{
    /**
     * Determine whether the user can upload files.
     *
     * @param User $user
     * @return bool
     */
    public function uploadFiles(User $user): bool
    {
        return true;
    }
}

但我一直收到 This action is unauthorized

这里的关键信息是我正在使用 Sanctum 在我的应用程序中验证我的用户。 Laravel 的 Vapor 默认使用 web 中间件

从文档中我无法找到发布 Vapor 配置的方法。

如果我们查看 the routes configuration,我们将得到:

    /**
     * Ensure that Vapor's internal routes are defined.
     *
     * @return void
     */
    public function ensureRoutesAreDefined()
    {
        if ($this->app->routesAreCached()) {
            return;
        }

        if (config('vapor.signed_storage.enabled', true)) {
            Route::post(
                config('vapor.signed_storage.url', '/vapor/signed-storage-url'),
                Contracts\SignedStorageUrlController::class.'@store'
            )->middleware(config('vapor.middleware', 'web'));
        }
    }

Vapor 正在获取 vapor.middleware 环境以告知哪个中间件将应用于 /vapor/signed-storage-url 路由。因为我使用的是 Sanctum,所以我只需要通过在我的 config 文件夹中创建一个 vapor.php 来手动发布 Vapor 的配置:

- config
-- app.php
-- filesystem.php
-- vapor.php 

现在,您可以在此文件中定义要设置为 auth:sanctum:

的中间件
<?php

return [
    // Most of these variables are not necessary as the default from Vapor's 
    // core library is okay for most cases but I will leave here you need to use any of them
    'redirect_to_root' => true,

    'redirect_robots_txt' => true,

    'serve_assets' => [],

    'middleware' => 'auth:sanctum' 
];

现在 Vapor 将开始使用 auth:sanctum 中间件来验证对 POST /vapor/signed-storage-url

的请求