【问题标题】:secured file in storage laravel存储 laravel 中的安全文件
【发布时间】:2020-07-22 22:43:35
【问题描述】:

我正在像这样在存储中上传文件: /storage/uploads/contract/19/12199/document.pdf

现在我需要只允许经过身份验证的用户查看这些文档,我使用这条路线: Route::get('/storage/{pathToFile}', function($pathToFile) {

if (auth()->user()) {
    return response()->file($pathToFile);
} else {
    return 'Nope, sorry bro, access denied!';
}

});

这不起作用,即使用户没有登录,仍然可以访问所有文件。

有什么想法吗?

谢谢

【问题讨论】:

  • 您应该使用auth()->check() 来确定当前用户是否经过身份验证
  • 我试过了,没用
  • 我试过这个:Route::get('/storage/{pathToFile}', function($pathToFile) { return 'Nope, sorry bro, access denied!'; });但是好像绕过了,路由声明有问题

标签: laravel


【解决方案1】:

您是否将公用文件夹符号链接到存储文件夹?如果是这样,它仍然可以访问,因为默认公共入口点将是“公共”文件夹,因此该文件夹中将提供“[host]/storage”。

我过去所做的是使用 S3 驱动程序并将文件 visibility 设置为私有然后使用:

public function get($path, $image)
{
    $file = Storage::disk('s3')->get("private/images/". $path. "/" . $image);
    return response($file, 200)->header('Content-Type', 'image/png');
}

在您的情况下,这将更改为:

if (auth()->user()) {
     $file = Storage::disk('s3')->get($pathToFile);
     return response()->file($file);
} else {
    return 'Nope, sorry bro, access denied!';
}

注意: S3驱动支持多种存储方案:https://flysystem.thephpleague.com/v1/docs/adapter/aws-s3-v2/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多