我已经使用Sanctum用RESTFull应用程序设置了Laravel Vapor,现在我只想上传一个文件。我正在请求POST /vapor/signed-storage-url
,我得到:
{
"message": "This action is unauthorized.",
...
}
我已经创建了文档中描述的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配置的方法。
如果我们查看路线配置,我们将拥有:
/**
* 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'),
ContractsSignedStorageUrlController::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
的请求