如何用流明5.8中的dingo修复实现jwt。*?目标[Dingo Api Contract Routing Adapter]不可实例化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用流明5.8中的dingo修复实现jwt。*?目标[Dingo Api Contract Routing Adapter]不可实例化相关的知识,希望对你有一定的参考价值。

我已经在我的Lumen(5.8.4)应用程序中实现了tymon / jwt-auth版本1.0.0-rc4.1作为第三方,现在我继续在https://github.com/dingo/api/wiki/Authentication之后使用Dingo实现Authentication,我需要添加它(或以任何其他方式注册jwt与dingo)

app('DingoApiAuthAuth')->extend('jwt', function ($app) {
   return new DingoApiAuthProviderJWT($app['TymonJWTAuthJWTAuth']);
});

到app.php我收到此错误

错误:构建[Dingo Api Auth Auth,Dingo Api Routing Router]时,目标[Dingo Api Contract Routing Adapter]无法实例化。

我想我已经在这个主题上搜索并尝试了互联网上存在的所有东西,因为我正在研究它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('DingoApiAuthAuth')->extend('jwt', function ($app) {
    return new DingoApiAuthProviderJWT($app['TymonJWTAuthJWTAuth']);
}); <- this makes problem, without this everything works, I even get jwt in postman

$app->register(TymonJWTAuthProvidersLumenServiceProvider::class);
$app->register(DingoApiProviderLumenServiceProvider::class);
$app->register(AppProvidersAppServiceProvider::class);
$app->register(AppProvidersAuthServiceProvider::class);

有人在新版本上实现了实现,或者有更好的方法吗?我已经尝试了一个工作示例https://github.com/krisanalfa/lumen-jwt但是我看到上次更新是2年前,流明版本是5.4。我可以使用它还是不推荐使用它?

答案

好的,我终于开始工作了。如果有人遇到同样的问题,我接下来做了,在我注册的AppServiceProvider中

use DingoApiAuthProviderJWT;

并在同一文件中的boot方法中:

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

        app('DingoApiAuthAuth')->extend('jwt', function ($app) {
   return new JWT($app['TymonJWTAuthJWTAuth']);
});
    }

在auth.php中

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

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

在jwt.php中

 'providers' => [

        'jwt' => TymonJWTAuthProvidersJWTLcobucci::class,

        'auth' => TymonJWTAuthProvidersAuthIlluminate::class,

        'storage' => TymonJWTAuthProvidersStorageIlluminate::class,
    ],

然后保护路线,例如:

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

另外,请注意,如果您遇到异常“令牌签名无法验证”,请在通过POSTMAN发送jwt时删除引号:)

最好的祝福。

以上是关于如何用流明5.8中的dingo修复实现jwt。*?目标[Dingo Api Contract Routing Adapter]不可实例化的主要内容,如果未能解决你的问题,请参考以下文章

在没有 Lumen/Laravel 会话的情况下使用 Lumen + Dingo + JWT

内部请求需要 Laravel Dingo 身份验证 JWT

未定义身份验证保护驱动程序 [api]。流明、野狗、JWTAuth

Laravel + Dingo + JWT + cors 和 OPTIONS 方法

laravel dingo/api添加jwt-auth认证

jwt api 身份验证如何工作(使用 dingo-laravel)