Generate a url with an expiration date and signature to prevent unauthorized access

0.0.4 2019-10-03 19:27 UTC

This package is auto-updated.

Last update: 2021-12-31 00:36:25 UTC


This package can create URLs with a limited lifetime. This is done by adding an expiration date and a signature to the URL.

$urlSigner = new MD5UrlSigner('randomkey');

$urlSigner->sign('', 30);

// => The generated url will be valid for 30 days

This will output an URL that looks like

Imagine mailing this URL out to the users of your application. When a user clicks on a signed URL your application can validate it with:



The package can installed via Composer:

$ composer require patieru/url-signer


A signer-object can sign URLs and validate signed URLs. A secret key is used to generate signatures.

use Patieru\UrlSigner\MD5UrlSigner;

$urlSigner = new MD5UrlSigner('mysecretkey');

Generating URLs

Signed URLs can be generated by providing a regular URL and an expiration date to the sign method.

$expirationDate = (new DateTime)->modify('10 days');

$urlSigner->sign('', $expirationDate);

// => The generated url will be valid for 10 days

If an integer is provided as expiration date, the url will be valid for that amount of days.

$urlSigner->sign('', 30);

// => The generated url will be valid for 30 days

Validating URLs

To validate a signed URL, simply call the validate() method. This will return a boolean.


// => true


// => false

Writing custom signers

This packages provides a signer that uses md5 to generate signature. You can create your own signer by implementing the Patieru\UrlSigner\UrlSigner-interface. If you let your signer extend Patieru\UrlSigner\BaseUrlSigner you'll only need to provide the createSignature-method.


The tests can be run with:

$ vendor/bin/phpspec run

##Integrations To get started quickly in Laravel you can use the patieru/laravel-url-signer package.


Please see CHANGELOG for more information what has changed recently.


Please see CONTRIBUTING for details.



The MIT License (MIT). Please see License File for more information.