Milind Daraniya

Introduction to Laravel Sanctum: API Authentication

Published January 28th, 2023 11 min read

Laravel Sanctum is a lightweight package that provides a simple and secure way to handle API authentication in Laravel applications. It offers token-based authentication and is designed to work seamlessly with both SPA (Single Page Application) and mobile applications. In this post, we'll explore the basics of Laravel Sanctum and its implementation for API authentication, making your Laravel-powered APIs secure and user-friendly.

Installing Laravel Sanctum

To begin using Laravel Sanctum, you need to install it via Composer:

composer require laravel/sanctum

Next, run the migrations to create the necessary database tables:

php artisan migrate

Configuring Sanctum

After installing Sanctum, you need to configure it to work with your Laravel application. Open the config/auth.php file and update the guards and api driver settings:

'guards' => [
    // ...
    'api' => [
        'driver' => 'sanctum',
        'provider' => 'users',
    ],
],

'providers' => [
    // ...
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class,
    ],
],

Authenticating API Requests

With Sanctum configured, you can now authenticate API requests using tokens. To authenticate a user and obtain a token, create a login endpoint:

use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;

Route::post('/login', function (Request $request) {
    $credentials = $request->only('email', 'password');

    if (Auth::attempt($credentials)) {
        $user = Auth::user();
        $token = $user->createToken('authToken')->plainTextToken;

        return response()->json(['token' => $token], 200);
    }

    return response()->json(['message' => 'Unauthorized'], 401);
});

Protecting API Routes

To protect your API routes, you can use the auth:sanctum middleware. Apply this middleware to the routes that require authentication:

Route::middleware('auth:sanctum')->group(function () {
    Route::get('/user', function (Request $request) {
        return $request->user();
    });

    // Other protected routes go here
});

Logging Out

To log out a user and invalidate their token, you can use the logout method:

Route::middleware('auth:sanctum')->post('/logout', function (Request $request) {
    $user = $request->user();
    $user->tokens()->delete();

    return response()->json(['message' => 'Logged out successfully'], 200);
});

Laravel Sanctum simplifies API authentication in Laravel applications, allowing you to create secure and reliable APIs with minimal effort. By implementing token-based authentication, you can protect your API routes and provide a seamless user experience for SPA and mobile applications.

With Laravel Sanctum's flexibility and straightforward configuration, you can focus on building powerful APIs while ensuring they remain secure and accessible only to authorized users.