В Laravel 5.7, Как переопределить промежуточное ПО Tymon Jwt-Auth в ядре? - PullRequest
0 голосов
/ 23 марта 2019

Я использую 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 и сначала проверить свои собственные вещи.

Ответы [ 2 ]

2 голосов
/ 23 марта 2019

Я могу рассказать вам, почему это происходит.

Файл app\Http\Kernel.php с конфигурацией промежуточного программного обеспечения вызывается раньше, чем при регистрации поставщиков услуг.

Поэтому вызывается поставщик услуг Tymon JWTвпоследствии и устанавливает псевдонимы промежуточного программного обеспечения для:

  • 'jwt.auth' => Tymon \ JWTAuth \ Http \ Middleware \ Authenticate :: class,
  • 'jwt.check' => Tymon\ JWTAuth \ Http \ Middleware \ Check :: class,
  • 'jwt.refresh' => Tymon \ JWTAuth \ Http \ Middleware \ RefreshToken :: class,
  • 'jwt.renew' => Tymon \ JWTAuth \ Http \ Middleware \ AuthenticateAndRenew :: class,

, переопределяя таким образом ваш ключ.

Таким образом, использование другого ключа промежуточного программного обеспечения является правильным способом использования вашей собственной реализации.

0 голосов
/ 23 марта 2019

Я переименовал группу маршрутизации промежуточного программного обеспечения и изменил

Route::middleware(['jwt.auth'])->group(function() {

на

Route::middleware(['jwt.authenticate'])->group(function() {

и

'jwt.auth' => \App\Http\Middleware\JWTAuthenticate::class

на

'jwt.authenticate' => \App\Http\Middleware\JWTAuthenticate::class

И оригинал jwt.auth больше не назывался.Я не знаю почему, но теперь я могу контролировать это в своем Middleware.

...