я просмотрел некоторые статьи и форумы, чтобы выяснить, как реализовать аутентификацию JWT в моем бэкэнде. проблема в том, что я видел разные подходы и не знаю, какой из них правильный.
учтите, что я уже установил пакет JWT. после этого некоторые делают так:
'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
'guards' => [
...
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
],
а затем в конструкторе контроллеров, используя
$this->middleware('auth:api');
для проверки пользователя. они говорят, что установка 'driver' => 'jwt' сделает защиту jwt по умолчанию. также они используют
$token = auth()->attempt($credentials)
для проверки токена. это был первый групповой подход.
вторые никогда ничего не меняют в config/auth.php (без смены драйвера - без смены gaurd...).
они используют промежуточное ПО в app/Http/Kernel.php (routeMiddleware):
'auth.jwt' => \Tymon\JWTAuth\Http\Middleware\Authenticate::class,
и при создании маршрутов они применяют его с помощью группы, например:
Route::group(['middleware' => 'auth.jwt'], function () {
Route::get('logout', 'ApiController@logout');
Route::get('user', 'ApiController@getAuthUser');
Route::get('products', 'ProductController@index');
Route::get('products/{id}', 'ProductController@show');
Route::post('products', 'ProductController@store');
Route::put('products/{id}', 'ProductController@update');
Route::delete('products/{id}', 'ProductController@destroy');
});
также они используют $jwt_token = JWTAuth::attempt($input) или $this->user = JWTAuth::parseToken()->authenticate(); для получения и проверки пользователя.
меня смущают эти подходы, должен ли я использовать jwt в качестве защиты по умолчанию? или я просто добавляю его в свои пакеты и использую явно?
Оба этих подхода используют аутентификацию jwt как route middleware, я предполагаю, что второй подход имеет, так сказать, свой собственный «драйвер» и не использует один из встроенных (или, может быть, использует, но не через конфигурация)
На самом деле не имеет значения, каким образом вы применяете промежуточное программное обеспечение к маршрутам, это все равно одно и то же. Это групповое определение просто группирует routes и применяет middleware одновременно к нескольким маршрутам. Первый подход прикрепляет это промежуточное ПО к отдельному контроллеру. Они просто работают в разных областях
Короче говоря, оба они, вероятно, делают одно и то же, но применяют middleware по-разному, поскольку у Laravel есть несколько способов сделать это.
спасибо за ваш ответ, это было полезно
хорошее замечание, проголосовал






Хороший вопрос. Я предположил, что люди просто недостаточно знают о теме и просто используют то, что они видели, «работает».