This is an extensive modification of Laravel Single Use Signed URL. This version allows a customizable number accesses to the generated URL, after which the url will be unavailable. This package was created specifically for signed URLs that can be used as a temporary src
url for media files. Due to the way browsers often handle these urls, the request will be made twice -- once for a pre-flight request and the second time for the actual file. This implementation allows for the url to be used twice in quick succession, but then the url will become unavailable. The url generated will only be available to the user who generates it and an expiration time can be set for the url usage.
- Install with composer:
composer require mindlarkdev/laravel-limited-use-signed-url
- Publish the configuration file:
php artisan vendor:publish
Select the Mindlarkdev\LimitedUseSignedUrl\LaravelLimitedUseSIgnedUrlSeviceProvider
item.
The config file is named limited-use-urls.php
and has the following options:
return [
'expires_in_minutes' => 2,
'uses_allowed' => 2,
]
These settings allow you to set the default expiration and allowed uses. These parameters can also be overridden when a url is created in a controller.
- Run
php artisan migrate
.
I originally forked this from Laravel Limited Use Signed URL so I could make it more difficult for someone to actually access a direct download link for an embedded src
attribute url. The original package is quite useful for limited-use URLs for password resets, etc.
First create a route that accepts a {user} as a parameter and give it a name. For example:
Route::get('/play-media/{user}/{content}', [LimitedUseSignedUrlController::class, 'handle'])
->name('limited-use-url')
->middleware('validateLimitedUseSignedUrl');
The above route can be whatever you want really. The package will append the extra paramaeters in the background. For example, you could create a route like: Route::get('/play-media/{user}/{media}', ...)
. However, you must include the {user}
as the first parameter in the route.
Then in a controller you can generate a dual use signed url to this route with the following:
$urlData = [
'route_name' => 'limited-use-url',
'user_id' => auth()->user()->id,
'expires_in_minutes' => 3, // OPTIONAL - default set in config file
'uses_allowed' => 1 // OPTIONAL - default set in config file
];
$extraParams = ['content' => $content->id]; // Extra params will be added to the route. In the above example, we're using {content}
$url = MakeLimitedUseSignedUrl::makeUrl('limited-use-url', $urlData, $extraParams);
For my use (as the src
attribute), I can then simply pass the $url
to the view and use it in the audio or video tag.
Tests are not working right now.
Please see CHANGELOG for more information what has changed recently.
Please see CONTRIBUTING for details.
- Multi-use URLs Implementation: midlarkdev
- Original package by: Intellow
- All Contributors
The MIT License (MIT). Please see License File for more information.
This package was generated using the Laravel Package Boilerplate.