默认情况下,Laravel Vapor要求用户经过身份验证才能执行上传。我需要允许未经身份验证的人执行上传。我该怎么办?
谢谢
我认为,如果您在UserPolicy中添加这样的内容,蒸气应该起作用
public function before($user)
{
if (Auth::guest()) {
return true;
}
}
,
我们通过覆盖 the default vapor/signed-storage-url
route's handling 来处理这个问题。
在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);
}
}