Как исправить реализацию jwt с помощью dingo в люмене 5.8. *? Цель [Dingo \ Api \ Contract \ Routing \ Adapter] не может быть создана - PullRequest
0 голосов
/ 19 апреля 2019

Я реализовал tymon / jwt-auth версии 1.0.0-rc4.1 в качестве стороннего в своем приложении Lumen (5.8.4) и теперь, когда продолжаю реализацию Authetication с Dingo, следуя https://github.com/dingo/api/wiki/Authentication в шаг, где мне нужно добавить это (или любой другой способ регистрации JWT с Динго)

app('Dingo\Api\Auth\Auth')->extend('jwt', function ($app) {
   return new Dingo\Api\Auth\Provider\JWT($app['Tymon\JWTAuth\JWTAuth']);
});

в app.php я получаю эту ошибку

Ошибка: Цель [Dingo \ Api \ Contract \ Routing \ Adapter] не может быть создана при сборке [Dingo \ Api \ Auth \ Auth, Dingo \ Api \ Routing \ Router].

Я думаю, что я искал и пробовал все вещи, которые существуют в Интернете по этой теме, потому что я работаю над этим в течение 2 дней, и большинство из них используют старую версию динго и / или Люмена. Я также пробовал разные адаптеры, которые нашел в git, но ни один из них не работает.

Это мои настройки: composer.json:

"require": {
        "php": ">=7.1.3",
        "dingo/api": "^2",
        "flipbox/lumen-generator": "^5.6",
        "laravel/lumen-framework": "5.8.*",
        "nesbot/carbon": "^2.17",
        "tymon/jwt-auth": "1.0.0-rc4.1",
        "vlucas/phpdotenv": "^3.3"
    }

app.php

app('Dingo\Api\Auth\Auth')->extend('jwt', function ($app) {
    return new Dingo\Api\Auth\Provider\JWT($app['Tymon\JWTAuth\JWTAuth']);
}); <- this makes problem, without this everything works, I even get jwt in postman

$app->register(Tymon\JWTAuth\Providers\LumenServiceProvider::class);
$app->register(Dingo\Api\Provider\LumenServiceProvider::class);
$app->register(App\Providers\AppServiceProvider::class);
$app->register(App\Providers\AuthServiceProvider::class);

Кто-нибудь работал с реализацией на более новых версиях, или есть какой-то лучший способ сделать это? Я попробовал один рабочий пример https://github.com/krisanalfa/lumen-jwt но, как я видел, последнее обновление было 2 года назад, а версия Lumen - 5.4. Должен ли я его использовать или он устарел?

1 Ответ

0 голосов
/ 23 апреля 2019

ОК, наконец-то я начал работать.Если кто-то столкнулся с той же проблемой, я сделал следующее, в AppServiceProvider я зарегистрировал

use Dingo\Api\Auth\Provider\JWT;

и загрузочный метод в том же файле:

public function boot()
    {
        Schema::defaultStringLength(191);

        app('Dingo\Api\Auth\Auth')->extend('jwt', function ($app) {
   return new JWT($app['Tymon\JWTAuth\JWTAuth']);
});
    }

в аутентификации.php

  'defaults' => [
        'guard' => env('AUTH_GUARD', 'api'),
    ],

    'guards' => [
        'api' => [
            'driver' => 'jwt',
            'provider' => 'users'
        ],
    ],

в jwt.php

 'providers' => [

        'jwt' => Tymon\JWTAuth\Providers\JWT\Lcobucci::class,

        'auth' => Tymon\JWTAuth\Providers\Auth\Illuminate::class,

        'storage' => Tymon\JWTAuth\Providers\Storage\Illuminate::class,
    ],

и затем защитите маршрут, например:

 $api->group(['middleware' => 'api.auth'], function ($api) {
        $api->get('/users', 'App\Http\Controllers\UserController@index');
    });

Также, быстрое замечание, если у вас естьИсключение «Подпись токена не может быть проверено», удаляйте кавычки при отправке jwt через POSTMAN:)

С уважением.

...