2016-05-16 5 views
9

私は公共/資産/メディア/フォルダを持っていますAuthコントローラによる資産/メディアフォルダを保護しますか? Laravel 5.2

私は以下のようにこのファイルに公にアクセスできます。

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

同様に、アセット/メディアフォルダには、その場で作成されている他のフォルダがあります。

そこに多くのファイルがまたそれらのサブフォルダ内に存在し、また、資産/ Mediaフォルダに存在している

は、どのような方法は、そこにあるように、私は、資産/ Mediaフォルダ内のファイルまたは任意のファイルの存在にアクセスしようとした場合Asset/Mediaフォルダのサブフォルダに、認証が行われていないため、ログインページにリダイレクトする必要がありますか?私は意味

は、私はこのフォルダを保護するためにAuthミドルウェアを使用することができますか?もしそうなら、Android Appからファイルにアクセスする必要がある場合は有効なアプローチですか?

答えて

1

私のサンプルURLはこちら:

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

マイルート

Route::get('/storage/Asset/Media/{ID}/{file}', array(
    'as' => 'Files', 
    'uses' => 'User\Account\Media\[email protected]', 
)); 

コントローラのアクションメソッド

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を使用することができます。

1

ファイルを保護する場合、彼らはLaravelを通過する必要があります。ファイルへのアクセス(完全なパスを使用)はLaravelを経由しません。

次に、Authを使用してアクセス権を確認できるようにファイルにアクセスするコントローラを作成します。それはまた、あなたがPHPを使用してファイルにアクセスするにはアクセスできない場所にファイルを入れて、Laravelファイルシステムを使用する必要があることを意味します

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

Android Appからファイルにアクセスする必要がある場合は有効なアプローチですか? – Pankaj

+0

Android App経由でファイルにアクセスする際に問題が発生することはありませんが、このアプローチを使用して大量のファイルを扱っている場合、このアプローチは必要以上のリソースを消費する可能性があります。 –

1

使用それについては、以下のルート:パブリックフォルダ内の

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', '.+'); 
+0

Android Appからファイルにアクセスする必要がある場合は有効なアプローチですか? – Pankaj

+0

これはまったく動作しません。私はまだファイルを匿名ユーザーとして見ることができます – Pankaj

0

ファイルの意志Laravelによって使用される書き換えルールの誰もがアクセスできるようにするために、Laravelは誰かが公共の倍エル。

だから、あなたは多分、ストレージフォルダに、どこか他のあなたの制限されたファイルを置く必要がありますが、最終的には、それは問題ではありません。保存フォルダにすべてのあなたの資産/ Mediaフォルダを入れてフライ(How storage works)上のフォルダを作成してコードを更新した後

FileControllerを作成します。

PHP

class FileController extends Controller { 
    public function __construct() { 
     $this->middleware('auth'); 
    } 

    public function downloadFile($filename) { 
     return response()->download(storage_path($filename), null, [], null); 
    } 
} 

のconfigureこのルート:

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

それだ、今は自分の認証されたユーザーは、ありがとうアセットファイルをダウンロードすることができるだろうミドルウェアの認証に、それはまたアンドロイドアプリのために働くでしょう。

関連する問題