Давай без фокусов. Тебя достали слова «безопасность», «современные практики» и прочая маркетинговая хрень. Настоящая защита маршрутов в Laravel сводится к одному: ни один левый запрос не должен пройти. JWT (JSON Web Token) — твой инструмент для этого. Он не спасет мир, но защитит API, если ты знаешь, что делаешь. Ниже покажу, как внедрить JWT так, чтобы оно реально работало, без лишних танцев с бубном.
Шаг 1: Установка JWT
Первое, что нужно сделать — установить пакет. Точка.
composer require tymon/jwt-auth
Не хочешь вручную ковыряться с зависимостями — Composer сделает всё за тебя.
Шаг 2: Публикация конфигурации
Пакет установлен? Отлично, теперь публикуем конфиг.
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider" Это создаст config/jwt.php. Здесь ты можешь подкрутить параметры токена. Не поленись — иначе потом будешь бегать, пытаясь понять, почему JWT летит в трубу.
Шаг 3: Генерация ключей
JWT без ключей — это как оружие без патронов. Генерируем:
php artisan jwt:secret
В .env появится JWT_SECRET. Не теряй его. Если потеряешь — токены всех пользователей полетят в ад.
Шаг 4: Модель User
Нам нужна модель, которая понимает JWT. Реализуем интерфейс:
use Tymon\JWTAuth\Contracts\JWTSubject;
class User extends Authenticatable implements JWTSubject
{
public function getJWTIdentifier()
{
return $this->getKey();
}
public function getJWTCustomClaims()
{
return [];
}
}
Без этого твои токены будут пустыми. Да, я знаю, иногда хочется просто крикнуть: «Почему всё так сложно?». Но так работает JWT.
Шаг 5: Защита маршрутов
Теперь самое сладкое — middleware.
Route::middleware(['jwt.auth'])->group(function () {
Route::get('/user', function (Request $request) {
return $request->user();
});
});
Любой левый запрос на /user без токена — получит 401 и заслуженно. Тут нет «может быть» или «попробуй еще раз».
Шаг 6: Аутентификация и выдача токена
Сделаем простой маршрут /login, который отдаёт токен:
Route::post('/login', 'AuthController@login');
В контроллере:
public function login(Request $request)
{
$credentials = $request->only(['email', 'password']);
if (! $token = auth()->attempt($credentials)) {
return response()->json(['error' => 'Unauthorized'], 401);
}
return $this->respondWithToken($token);
}
protected function respondWithToken($token)
{
return response()->json([
'access_token' => $token,
'token_type' => 'bearer',
'expires_in' => auth()->factory()->getTTL() * 60
]);
}
Да, это прямой и честный код. Никто не держит тебя за руку — если credentials не сходятся, токен не дают. Всё просто.
Итог
JWT в Laravel — это не какая-то магия. Это инструмент, который реально защищает твои маршруты, если не забить на детали. Не лей воду про «современные практики» — настрой middleware, генерируй ключи, делай модель правильной и не позволяй левым запросам проходить.
Если ты считаешь, что это сложно — знай: сложно только в том смысле, что кто-то решил упростить тебе жизнь и придумывает новые термины. Реально — пару команд, немного конфигов, и твое API защищено.
0 комментариев