laravel認証を使った画像/js/cssファイルの非公開設定について

laravel認証を使った画像/js/cssファイルの非公開設定について

laravel5.1では、通常publicフォルダ以下に画像/js/cssファイルを配置して、認証なしでアクセスできるようにしている(特定のユーザしか見れないような画像は通常storageフォルダに置く)
通常であれば、publicフォルダに.htaccessでBASIC認証をかければ非公開なんだけど、仕様的にかけられない場合などに活用して下さい。

今回行ったのは、画像/js/cssファイルを、publicフォルダからstorageフォルダに移行して、routes.php経由(laravel認証後、ファイル出力処理を行う)でアクセスできるようにしてみた。

1, 画像/js/cssファイルを、publicフォルダからstorageフォルダに移行
これで、laravelでファイル出力を行わない限り、アクセスできなくなる
※公開しているログイン画面で使われる「画像/js/cssファイル」はpublicフォルダに配置しておく(認証前でもアクセスできるようにする)

2, 通常通り、bladeファイルで画像/js/cssファイルを指定されたら、routes.phpで拾えるように記述を追記する

3, ファイル出力処理のコントローラーを作る(php artisan make:controller DownloadsController)

4, これで、一般ユーザ認証は問題なく画像/js/cssファイルへアクセス出来るようになったが、admin認証など別の認証をしている場合にアクセス出来なくなってします(一般ユーザ認証で守らているため)
一般ユーザ https://localhost/shop ←OK
管理者ユーザ https://localhost/shop/admin ←NG(一般ユーザ認証になってしまう)

4-a, 解決策としては、adminフォルダ以下のbladeファイルのパス指定にプレフィックスとしてadmin/を追加
{!! Html::script(‘admin/js/admin.js’); !!}
{!! Html::style(‘admin/css/admin.css’); !!}

4-b, admin認証の時でも同じ処理をするようにroutes.phpに追記。

5, 画像ファイルのアップロード機能があった場合は、public_pathからstorage_pathへ変更しておく事!

これでlaravelでも、ユーザ認証されていないと画像/js/cssファイルにアクセス出来なくなるはず(bladeファイルの書き方は、通常通りでOK!)