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
的请求
我已经使用 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