Back to Blog 3 min read

Creating Temporary, Expiring Links in Laravel

In today's digital world, we often encounter situations where we need to send time-sensitive links to users. Whether it's for password reset, email c...

In today's digital world, we often encounter situations where we need to send time-sensitive links to users. Whether it's for password reset, email confirmation, or any other temporary action, it's crucial to create links that expire after a certain period. Laravel, a popular PHP framework, makes this task simple and secure. In this blog, we'll walk you through the process of creating temporary, expiring links in your Laravel application.

Understanding the Basics

Before we dive into the technical details, let's get a clear understanding of what we're trying to achieve. Temporary links are URLs that grant access to specific actions, but only for a limited time. For example, when a user clicks on a temporary link to reset their password, that link should expire after an hour or a specific duration. These links are essential for ensuring the security of your application.

Generate a Temporary Link

The first step is to generate a temporary link. Laravel provides a convenient way to do this using the URL class. We'll use the temporarySignedRoute method to create a link that includes a signed expiration timestamp. Here's an example:

use Illuminate\Support\Facades\URL;

$temporaryLink = URL::temporarySignedRoute('temp-link-route', now()->addHours(1), ['param1' => 'value1']);

In this example, we're generating a link that will expire after one hour. You can adjust the expiration time to your specific needs.

Define a Route

Next, you need to define a route in your Laravel application that corresponds to the generated temporary link. You can do this in your web.php file. For instance:

Route::get('/temp-link/{param1}', 'TemporaryLinkController@index')->name('temp-link-route');

Create a Controller

Now, it's time to create a controller that will handle the logic when the temporary link is accessed. This controller, known as TemporaryLinkController, is generated using the following command:

php artisan make:controller TemporaryLinkController

Inside this controller, we'll verify the link's signature and check if it has expired. Here's a simplified example:

use Illuminate\Support\Facades\URL;
   
class TemporaryLinkController extends Controller
{
   public function index(Request $request)
   {
       if (!URL::hasValidSignature($request)) {
           abort(403, 'Unauthorized action.');
       }
   
       $param1 = $request->param1;
   
       // Implement your logic here to handle actions when the link is accessed.
       // This may include updating records, confirming email addresses, resetting passwords, and more.
   }
}

Related:

The Importance of Unit Testing in PHP Applications

How To Send Bulk Email Using Laravel

you can read more about generating URLs in laravel: here.

Conclusion

In conclusion, creating temporary, expiring links in Laravel is a common need for web applications. Laravel simplifies the process, ensuring that links are secure and time-limited.