You have to store your image outside of the public folder. Storage/app is made for this.
Then you have to create a route and a controller action to display the image from the file in storage. Of course you protect the route with auth middleware.
Route::get('images/{slug}.jpg', [
'as' => 'images.show',
'uses' => 'ImagesController@show',
'middleware' => 'auth',
]);
class ImagesController extends Controller
{
public function show($slug)
{
// get the image named $slug from storage and display it
// Something like (not sure)
$image = File::get('images/' . $slug . '.jpg');
return response()->make($image, 200, ['content-type' => 'image/jpg']);
}
}