В Laravel промежуточное программное обеспечение является важной концепцией, которая помогает управлять HTTP -запросами, введена в ваше приложение. Думайте об этом как о фильтре, который находится между запросом и логикой вашей заявки, позволяя вам проверять или изменять запросы, прежде чем они достигнут ваших контроллеров или после того, как они пройдут.
В этой статье мы разберем основы Laravel Middlewares, объясним, как они функционируют, и приведем практический пример использования промежуточного программного обеспечения с аутентификацией JWT (JSON Web Token) во время входа в систему пользователя.
Что такое промежуточное программное обеспечение в Ларавеле?
Определение:
Промежуточное программное обеспечение - это механизм в Ларавеле, который позволяет фильтровать HTTP -запросы, поступающие в ваше приложение. Они похожи на цепочку фильтров, которые могут изменить запрос до того, как он достигнет основной логики вашего приложения (например, контроллеров) или после того, как ответ был сгенерирован вашим контроллерами.
Зачем использовать промежуточное программное обеспечение?
Аутентификация: убедитесь, что пользователи входят в систему перед доступом к определенным маршрутам.
Авторизация: убедитесь, есть ли у пользователя правильные разрешения на доступ к ресурсу.
Запрос: отслеживайте входящие запросы или войдите в систему для отладки.
Обмен ресурсами кросс-аоригина (CORS): обрабатывайте заголовки CORS, прежде чем отвечать на запросы из разных истоков.
Запросы на дроссель: ограничить количество запросов, которые пользователь может сделать в пределах указанного временного окна (например, для предотвращения злоупотребления).
Типы промежуточного программного обеспечения в Ларавеле
- Глобальное промежуточное программное обеспечение: работает по каждому HTTP -запросу.
- Маршрут промежуточное программное обеспечение: применяется только к определенным маршрутам или контроллерам.
- Групповое промежуточное программное обеспечение: применяется к группе маршрутов или контроллеров.
Как работает промежуточное программное обеспечение в Ларавеле
Рабочий процесс промежуточного программного обеспечения:
Входящий запрос: когда пользователь отправляет запрос в ваше приложение, Laravel проверяет, если на маршруте назначено какое -либо промежуточное программное обеспечение.
Выполнение промежуточного программного обеспечения: промежуточное программное обеспечение обрабатывает запрос в зарегистрированном заказе. Вы можете решить, следует ли передавать запрос дальше по цепочке или остановить запрос, если определенные условия не будут выполнены.
Действие контроллера: если все средние войны проходят, запрос достигает контроллера и выполняет предполагаемое действие.
Ответ: Как только действие будет завершено, ответ возвращается через стек промежуточного программного обеспечения в обратном порядке, прежде чем оно достигнет пользователя.
Пример:
Представьте себе промежуточное программное обеспечение, которое проверяет, является ли пользователь администратором, прежде чем разрешать доступ к маршруту, который управляет пользовательскими ролями. Если пользователь не является администратором, он перенаправляется на «запретную» страницу.
Как создать промежуточное программное обеспечение в Ларавеле
Создать промежуточное программное обеспечение в Ларавеле очень просто. Вот основной процесс:
1. Создание промежуточного программного обеспечения
Чтобы создать пользовательское промежуточное программное обеспечение, используйте команду Artisan:
php artisan make:middleware CheckRole
Это будет генерировать файл с названием CheckRole.php
в app/Http/Middleware
каталог.
2. Логика промежуточного программного обеспечения
В CheckRole
промежуточное программное обеспечение, вы можете определить логику, которая должна быть выполнена, когда входит запрос. Вот пример, который проверяет, является ли пользователь администратором:
public function handle($request, Closure $next)
{
if (auth()->user()->role !== 'admin') {
return redirect('forbidden');
}
return $next($request);
}
3. Регистрация промежуточного программного обеспечения
Чтобы использовать промежуточное программное обеспечение, вам нужно зарегистрировать его в app/Http/Kernel.php
файл. Это позволяет Laravel знать, где применить промежуточное программное обеспечение.
Для Глобальное промежуточное программное обеспечение, добавить его в
$middleware
множество.Для Маршрут промежуточное программное обеспечение, добавить его в
$routeMiddleware
множество.
Пример для регистрации промежуточного программного обеспечения:
protected $routeMiddleware = [
'checkRole' => \App\Http\Middleware\CheckRole::class,
];
4. Применение промежуточного программного обеспечения на маршруты
После регистрации вы можете применить свое промежуточное программное обеспечение на определенные маршруты или контроллеры:
Route::get('admin/dashboard', function () {
// Admin dashboard logic here
})->middleware('checkRole');
Пример промежуточного программного обеспечения с аутентификацией JWT в Laravel
Одним из общих вариантов использования промежуточного программного обеспечения в Ларавеле является аутентификация. Здесь мы продемонстрируем, как использовать промежуточное программное обеспечение с помощью JWT (JSON Web Tokens) для защиты маршрутов и гарантировать, что только аутентифицированные пользователи могут получить к ним доступ.
1. Установите пакет аутентификации JWT
Первый шаг - установить пакет аутентификации JWT. Laravel не имеет встроенной поддержки JWT, поэтому нам нужен сторонний пакет, такой как Tymon/JWT-Auth.
composer require tymon/jwt-auth
После установки опубликуйте конфигурацию:
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
2. генерировать секрет JWT
Чтобы надежно подписать свои жетоны, вам нужно сгенерировать секретный ключ:
php artisan jwt:secret
3. Создайте промежуточное программное обеспечение для аутентификации с помощью JWT
Теперь создайте промежуточное программное обеспечение, которое проверит, имеет ли запрос действительный токен JWT. Это промежуточное программное обеспечение расширит токен и аутентифицирует пользователя.
php artisan make:middleware JwtMiddleware
В JwtMiddleware.php
Файл, используйте следующий код:
use Tymon\JWTAuth\Facades\JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;
public function handle($request, Closure $next)
{
try {
// Check if a valid token is provided
if (! $user = JWTAuth::parseToken()->authenticate()) {
return response()->json(['error' => 'User not found'], 401);
}
} catch (JWTException $e) {
return response()->json(['error' => 'Token is invalid'], 401);
}
// Allow the request to continue to the next middleware or controller
return $next($request);
}
4. Зарегистрируйте промежуточное программное обеспечение
Далее, зарегистрируйте свой JwtMiddleware
в Kernel.php
файл:
protected $routeMiddleware = [
'jwt.auth' => \App\Http\Middleware\JwtMiddleware::class,
]
5. Применить промежуточное программное обеспечение на маршруты
Наконец, применить jwt.auth
промежуточное программное обеспечение для маршрутов, которые требуют аутентификации:
Route::middleware(['jwt.auth'])->get('/user', function () {
return response()->json(auth()->user());
});
6. Gwt Generation и вход пользователей
Теперь создайте конечную точку для входа в систему пользователя, где будет генерироваться токен JWT. В вашем AuthController.php
:
use Tymon\JWTAuth\Facades\JWTAuth;
use Illuminate\Http\Request;
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
if ($token = JWTAuth::attempt($credentials)) {
return response()->json(['token' => $token]);
}
return response()->json(['error' => 'Unauthorized'], 401);
}
7. Тестирование аутентификации JWT
Теперь вы можете войти в систему, отправив POST
запрос на /login
с email
и password
Полем Ответ будет содержать токен JWT. Используйте этот токен в Authorization
заголовок запросов на защищенные маршруты, такие как /user
Полем
Пример запроса API с токеном JWT:
curl -X GET "http://your-app.com/user" -H "Authorization: Bearer <YOUR_JWT_TOKEN>"
Заключение
Middlewares - это мощный инструмент в Ларавеле, который позволяет вам чисто и организовано управлять HTTP -запросами. Независимо от того, обработаете ли вы аутентификацию, регистрацию или ограничиваете доступ к определенным маршрутам, Middlewares обеспечивают элегантное решение. В этой статье мы исследовали, как создать пользовательские средние войны, зарегистрировать их и использовать их с токенами JWT для аутентификации пользователей.
Понимая, как функционируют Laravel Middlewares, вы можете создать более безопасные, обслуживаемые и гибкие приложения. Счастливого кодирования!
Проверьте мои предыдущие учебники серии LaravelздесьПолем