Lumen by Example - Lesson 4
Lumen by Example - Lesson 4
Lumen Backend Tutorial - 5 More Advanced Examples
Example 1: API Token Authentication (Personal Access Tokens)
Implements token-based authentication using a custom token system.
File: routes/web.php
$router->post('/login', 'AuthController@login');
$router->get('/profile', ['middleware' => 'auth.token', 'uses' => 'AuthController@profile']);
File: app/Http/Middleware/AuthTokenMiddleware.php
<?php
namespace App\Http\Middleware;
use Closure;
use App\Models\User;
class AuthTokenMiddleware {
public function handle($request, Closure $next) {
$token = $request->header('Authorization');
$user = User::where('api_token', $token)->first();
if (!$user) {
return response()->json(['error' => 'Unauthorized'], 401);
}
$request->user = $user;
return $next($request);
}
}
File: app/Http/Controllers/AuthController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
use Illuminate\Support\Str;
class AuthController extends Controller {
public function login(Request $request) {
$user = User::where('email', $request->email)->first();
if (!$user || !password_verify($request->password, $user->password)) {
return response()->json(['error' => 'Invalid credentials'], 401);
}
$user->api_token = Str::random(60);
$user->save();
return response()->json(['token' => $user->api_token]);
}
public function profile(Request $request) {
return response()->json($request->user);
}
}
Explanation:
Implements token-based authentication, where users receive a token after logging in.
The middleware checks for a valid API token in the request headers.
The
/profileendpoint is protected, allowing access only with a valid token.Tokens expire when manually reset, improving security.
Suitable for mobile apps and secure API-based authentication.
Example 2: Event-Based Logging System
Records API requests into a database using Lumen events.
File: routes/web.php
$router->post('/submit', 'RequestLoggerController@store');
File: app/Http/Controllers/RequestLoggerController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Events\ApiRequestLogged;
class RequestLoggerController extends Controller {
public function store(Request $request) {
event(new ApiRequestLogged($request->all()));
return response()->json(['message' => 'Request logged']);
}
}
File: app/Events/ApiRequestLogged.php
<?php
namespace App\Events;
use Illuminate\Queue\SerializesModels;
class ApiRequestLogged {
use SerializesModels;
public $requestData;
public function __construct($requestData) {
$this->requestData = $requestData;
}
}
Explanation:
Implements an event-based logging system, triggering an event for every API request.
The
ApiRequestLoggedevent receives the request data for processing.Events are useful for background processing without blocking API requests.
Helps in monitoring API activity and debugging issues efficiently.
Useful for audit logging, security analysis, and debugging API interactions.
Example 3: Image Upload API with Validation
Handles secure image uploads with validation rules.
File: routes/web.php
$router->post('/upload-image', 'ImageUploadController@store');
File: app/Http/Controllers/ImageUploadController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class ImageUploadController extends Controller {
public function store(Request $request) {
$request->validate([
'image' => 'required|image|mimes:jpeg,png|max:2048'
]);
$path = $request->file('image')->store('images', 'public');
return response()->json(['path' => $path]);
}
}
Explanation:
Validates uploaded images, ensuring file type and size constraints before storing them.
Stores images securely in the
storage/app/public/imagesfolder.Protects against malicious file uploads by enforcing file validation rules.
Returns the file path in JSON response for frontend usage.
Suitable for profile pictures, product images, or gallery management.
Example 4: User Activity Tracking (Middleware)
Logs every request made by authenticated users.
File: routes/web.php
$router->group(['middleware' => 'auth.token'], function () use ($router) {
$router->get('/dashboard', 'DashboardController@index');
});
File: app/Http/Middleware/UserActivityMiddleware.php
<?php
namespace App\Http\Middleware;
use Closure;
use App\Models\UserActivity;
use Illuminate\Http\Request;
class UserActivityMiddleware {
public function handle(Request $request, Closure $next) {
UserActivity::create([
'user_id' => $request->user->id,
'path' => $request->path(),
'method' => $request->method()
]);
return $next($request);
}
}
File: app/Models/UserActivity.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class UserActivity extends Model {
protected $fillable = ['user_id', 'path', 'method'];
}
Explanation:
Tracks user activity by logging accessed endpoints.
The middleware automatically saves user ID, route path, and method in the database.
Helps in auditing API usage and detecting suspicious behavior.
The activity log can be filtered by user for analytics.
Useful for tracking admin actions or monitoring app engagement.
Example 5: Multi-Language Support (Localization API)
Allows retrieving messages in different languages dynamically.
File: routes/web.php
$router->get('/message/{lang}', 'LocalizationController@getMessage');
File: app/Http/Controllers/LocalizationController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
class LocalizationController extends Controller {
public function getMessage($lang) {
App::setLocale($lang);
return response()->json(['message' => __('messages.welcome')]);
}
}
File: resources/lang/en/messages.php
<?php
return [
'welcome' => 'Welcome to our application!'
];
File: resources/lang/es/messages.php
<?php
return [
'welcome' => '¡Bienvenido a nuestra aplicación!'
];
Explanation:
Implements multi-language support, allowing API responses in different languages.
Uses Laravel's localization system to dynamically switch messages based on user preference.
The
langparameter determines which language file to load.Expands easily by adding new language files.
Essential for global applications with diverse user bases.
Summary:
These examples introduce token authentication, event logging, image uploads, user tracking, and localization, showcasing advanced Lumen backend techniques for scalable and secure applications.