laravel 如何?對檔案授權訪問?

來源:互聯網
上載者:User

在laravel的public目錄下有個res的目錄,想在使用者訪問裡面的圖片的時候評鑑是否有許可權,
但是使用者輸入地址會直接存取到這個檔案,不會經過auth中介軟體的評鑑,
例如:在public下的res目錄裡面放一個圖片,

路由:

Route::get('/res/{res}', ['middleware' => 'auth', 'uses' => 'TestController@res']);

訪問可以直接看到圖片,如何?只有登入過的使用者才可以看到圖片呢?

我看了一下我的百度盤裡面的圖片的連結,
是類似於這樣的

http://thumbnail0.baidupcs.com/thumbnail/e9be0226a22b8a1ad721032ac0338bb3?fid=4079835327-250528-565979844600151&time=1467727200&rt=yt&sign=FDTAER-DCb740ccc5511e5e8fedcff06b081203-4mQdS41CM3TuSq6hpE8LIAn%2FiL0%3D&expires=2h&chkv=0&chkbd=0&chkpc=&dp-logid=4335431112578733428&dp-callid=0&size=c256_u256&quality=100

好像是給每個圖片生產一個hash值,然後根據路由和路由裡面的參數進行驗證,通過後根據hash返迴文件。
具體的實現原理,有哪位可以請教一下呢?

回複內容:

在laravel的public目錄下有個res的目錄,想在使用者訪問裡面的圖片的時候評鑑是否有許可權,
但是使用者輸入地址會直接存取到這個檔案,不會經過auth中介軟體的評鑑,
例如:在public下的res目錄裡面放一個圖片,

路由:

Route::get('/res/{res}', ['middleware' => 'auth', 'uses' => 'TestController@res']);

訪問可以直接看到圖片,如何?只有登入過的使用者才可以看到圖片呢?

我看了一下我的百度盤裡面的圖片的連結,
是類似於這樣的

http://thumbnail0.baidupcs.com/thumbnail/e9be0226a22b8a1ad721032ac0338bb3?fid=4079835327-250528-565979844600151&time=1467727200&rt=yt&sign=FDTAER-DCb740ccc5511e5e8fedcff06b081203-4mQdS41CM3TuSq6hpE8LIAn%2FiL0%3D&expires=2h&chkv=0&chkbd=0&chkpc=&dp-logid=4335431112578733428&dp-callid=0&size=c256_u256&quality=100

好像是給每個圖片生產一個hash值,然後根據路由和路由裡面的參數進行驗證,通過後根據hash返迴文件。
具體的實現原理,有哪位可以請教一下呢?

laravel本身只處理/public/index.php這一個入口, 你說的圖片檔案不在index.php裡面,Laravel不管的;

除非你把圖片的訪問放在一個控制器裡面,比如 /Img/locaiton?user=xxx&name=iiii, 這樣訪問ImgController.php,你自己讀取圖片顯示出來就行了, 你自己加auth就OK(注意不要把圖片放在/public下面了,放在public同級目錄下)

public/裡面除了index.php 其他的檔案都是純靜態檔案,根本就不在Laravel路由裡面

至於百度網盤的hash參數什麼的 都是讀取檔案的地址和到期時間,你自己按自己的方式實現就可以,想要什麼自己加

用WebServer做rewrite,經過一個控制器php,在這個控制器中Auth:check。

需要控制許可權訪問的檔案,不應當放在 public 目錄下,而是 storage 目錄下,這樣外部根本不可能直接存取得到。

你可以通過實現一個控制器,在這裡面評鑑訪問者許可權,若是符合,則可以以你希望的形式通過 HTTP 的傳輸串流輸出圖片位元據。

Laravel 的(準確的說是 Symfony)已經提供了這種類型的 Response,可以翻閱文檔尋找相應的 API。

所有你已知的那種圖片許可權驗證和防盜鏈處理方式大多是如此。

以上。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.