Я использую Laravel 5.7 для некоторых API. Я также использую пакет https://github.com/tymondesigns/jwt-auth для генерации токенов JWT для аутентификации пользователей. Я давно все настроил, и все работает хорошо.
Я регистрирую группу маршрутов в RouteServiceProvider.php
под routes/api_v1.php
:
Route::prefix('api/v1')
->middleware('api')
->namespace($this->namespace.'\API\V1')
->group(base_path('routes/api_v1.php'));
В config.auth.php
У меня есть защита api_v1 с драйвером jwt:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api_v1' => [
'driver' => 'jwt',
'provider' => 'users',
],
],
Я App/User.php
реализовал Tymon\JWTAuth\Contracts\JWTSubject
и реализовал 2 метода.
Но когда в app/Http/Kernel.php
я добавил в массив middlewares:
protected $routeMiddleware = [
// previous middlewares,
'jwt.auth' => \App\Http\Middleware\JWTAuthenticate::class
];
Маршруты в routes/api_v1.php
под группой jwt.auth
:
Route :: middleware (['jwt.auth']) -> group (function () {
// Keep auto resource route at bottom to prevent route conflict with Show parameter route
foreach(Controller::$resourceModels as $key => $model) {
//Route::post($key.'/{id}/patch', $model.'Controller@patchUpdate');
Route::resource($key, $model.'Controller');
}
* * 1 028}); * * тысяча двадцать девять
никогда не достигает промежуточного программного обеспечения App\Http\Middleware\JWTAuthenticate::class
, но всегда переходите к исходному промежуточному программному обеспечению пакета tymon Tymon\JWTAuth\Http\Middleware\Authenticate::class
.
Даже если я не помещаю драйвер api в jwt в конфигурации auth.php
, и я не помещаю какой-либо класс jwt.auth
в Middleware, он нормально работает с оригинальным промежуточным ПО.
Мне нужно, чтобы группа Routes перешла в свой собственный класс промежуточного программного обеспечения App/Http/Middlewares/JWTAuthenticate
:
<?php
namespace App\Http\Middleware;
use Tymon\JWTAuth\Http\Middleware\Authenticate;
use Closure;
class JWTAuthenticate extends Authenticate
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
*
* @throws \Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException
*
* @return mixed
*/
public function handle($request, Closure $next)
{
// My own logics here
// ...
$this->authenticate($request);
return $next($request);
}
}
и таким образом я могу переопределить метод handle
и сначала проверить свои собственные вещи.