laravel - Laravel Vapor - 允许未经身份验证的用户执行上传
问题描述
默认情况下,Laravel Vapor 要求用户通过身份验证才能执行上传。我需要允许未经身份验证的执行上传。我怎样才能做到这一点?
谢谢
解决方案
我们通过覆盖默认vapor/signed-storage-url
路由的处理来处理这个问题。
在routes/web.php
.
Route::post('vapor/signed-storage-url', [Controllers\SignedStorageUrlController::class, 'store']);
在我们的SignedStorageUrlController
中,我们使用store
删除了此检查的函数:
Gate::authorize('uploadFiles', [
$request->user(),
$bucket = $request->input('bucket') ?: $_ENV['AWS_BUCKET'],
]);
导致:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
use Laravel\Vapor\Http\Controllers\SignedStorageUrlController as VaporSignedStorageUrlController;
class SignedStorageUrlController extends VaporSignedStorageUrlController
{
public function store(Request $request)
{
$this->ensureEnvironmentVariablesAreAvailable($request);
$bucket = $request->input('bucket') ?: $_ENV['AWS_BUCKET'];
$client = $this->storageClient();
$uuid = (string) Str::uuid();
$signedRequest = $client->createPresignedRequest(
$this->createCommand($request, $client, $bucket, $key = ('tmp/'.$uuid)),
'+5 minutes'
);
$uri = $signedRequest->getUri();
return response()->json([
'uuid' => $uuid,
'bucket' => $bucket,
'key' => $key,
'url' => 'https://'.$uri->getHost().$uri->getPath().'?'.$uri->getQuery(),
'headers' => $this->headers($request, $signedRequest),
], 201);
}
}
推荐阅读
- javascript - 如何对 REST API 中特定模型的所有字段使用一个更新函数?
- node.js - 开玩笑通过测试但 --covering 选项不拾取文件
- javascript - 选择菜单的默认值
- javascript - 如何在运行时将 JavaScript ES6 类转换为类工厂 mixin?
- php - 如何使用 PHP 删除 wordpress 中的重复空格
- json - 使用 jq 生成字段值频率计数
- jquery - 两行数据库中的 TreeListView 用于常见问题解答用户解决方案
- python - 使用经过训练的模型来预测具有不同 input_shape 数据的类
- google-cloud-platform - Google Cloud Functions - 如何正确设置默认凭据?
- excel - 如何将焦点集中在另一个打开的应用程序上?