Защитить папку Asset / Media через Auth Controller? Laravel 5.2

У меня есть общедоступная / Asset / Media / папка

Я могу получить доступ к этому файлу публично, как показано ниже.

http://localhost/myapp/public/Asset/Media/1/phpunit.xml 

Аналогичным образом в папке Asset / Media создаются другие папки, которые создаются «на лету».

В этой подпапке присутствует много файлов, которые также присутствуют в папке Asset / Media

Есть ли способ, чтобы, если я пытаюсь получить доступ к любому файлу в папке Asset / Media или к любому файлу, находящемуся в подпапке папки Asset / Media, я должен быть перенаправлен на страницу входа, потому что аутентификация не выполняется?

Я имел в виду, могу ли я использовать Auth Middleware для защиты этой папки? Если это так, это действительный подход, если нам нужно получить доступ к файлам из приложения Android?

Если вы хотите защитить файлы, им необходимо пройти через Laravel. Доступ к файлу, как вы (используя полный путь), не проходит через Laravel. Вы можете достичь этого, создав маршрут:

 Route::group(['middleware' => ['auth']], function () { Route::get('/secure/file/{file_name}', 'FileController@file'); } 

Затем создайте контроллер для доступа к файлу, чтобы вы могли использовать Auth для проверки доступа к доступу. Это также означает, что вы должны поместить файл в недоступное место и использовать файловую систему Laravel для доступа к файлу с помощью PHP:

 class FileController extends Controller { public function file() { return Storage::get('path/to/phpunit.xml'); } } 

Laravel 5.2 представил HTTP Middleware, я бы посоветовал вам это сделать.

https://laravel.com/docs/5.2/middleware#middleware-groups

Этот поток может помочь вам заставить его работать …

Laravel 5.2 Auth не работает

Используйте следующий маршрут:

 Route::get('/myapp/public/Asset/Media/{id}', function ($id) { if (Auth::guest()){ return Redirect::guest('login'); }else{ $img="/myapp/public/Asset/Media/".$id; if(File::exists($img)) { return Response::make($img, 200, array('content-type' => 'image/jpg')); }else{ return false; } })->where('id', '.+'); 

Мой образец URL-адреса здесь:

http://domainname.com/storage/Asset/Media/1/filename.txt

Мой маршрут

 Route::get('/storage/Asset/Media/{ID}/{file}', array( 'as' => 'Files', 'uses' => 'User\Account\Media\MediaController@DownloadMedia', )); 

Метод действия контроллера

 public function DownloadMedia($ID) { $headers = array( 'Content-Type' => 'application/octet-stream', 'Content-Disposition' => 'attachment; filename=somefile.txt"' ); return response()->download(base_path("storage/Asset/Media/1/somefile.txt")); } 

Здесь важно то, что я могу использовать application/octet-stream для загрузки любого типа файла.

Файл в общей папке будет доступен каждому из правил перезаписи правил, используемых Laravel, Laravel даже не будет вызываться, когда кто-то будет обращаться к файлу в общей папке.

Таким образом, вы должны поместить свои файлы с ограниченным доступом в другое место, возможно, в папку с хранилищем, но в конечном итоге это не имеет значения.

После размещения всей папки «Ресурсы / мультимедиа» в папке хранилища и обновления кода, который создает вашу папку «на лету» ( как работает хранилище ).

Создайте FileController:

PHP

 class FileController extends Controller { public function __construct() { $this->middleware('auth'); } public function downloadFile($filename) { return response()->download(storage_path($filename), null, [], null); } } 

Настройте этот маршрут:

 Route::get('file/{filename}', 'FileController@downloadFile')->where('filename', '^[^/]+$'); 

Вот и все, теперь только ваш аутентифицированный пользователь сможет загружать файлы активов thanx в антивирусное ПО, которое также будет работать для приложения Android.