如何在流明5.8。*中使用dingo修复实现jwt?目标[Dingo \ Api \ Contract \ Routing \ Adapter]无法实例化

时间:2019-04-19 16:42:28

标签: php lumen dingo-api jwt-auth

我已经在我的Lumen(5.8.4)应用程序中将tymon / jwt-auth版本1.0.0-rc4.1实现为第三方,现在当我继续在步骤https://github.com/dingo/api/wiki/Authentication之后对Dingo执行Authetication时我需要在其中添加此内容(或通过其他任何方法在dingo中注册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 \ Auth \ Auth,Dingo \ Api \ Routing \ Router]时,无法实例化目标[Dingo \ Api \ Contract \ Routing \ Adapter]。

我想我已经搜索并尝试了有关该主题的Internet上存在的所有内容,因为我已经进行了2天的研究,并且其中大多数都使用了旧版本的dingo和/或Lumen。我还尝试了在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年前,流明版本是5.4。 我应该使用它还是不建议使用它?

1 个答案:

答案 0 :(得分:0)

好的,我终于可以使用它了。如果有人遇到相同的问题,我接下来将在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']);
});
    }

在auth.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');
    });

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

最诚挚的问候。