“认证”来自哪里

时间:2019-12-10 10:22:04

标签: php laravel lumen laravel-middleware

我目前正在学习Lumen,我正在重新安装Laravel6.x。 我正在使用RESTClient来刺激我的Lumen API /发送http-Requests。

我现在想用JWT设置一些基本的身份验证,并且我已经完成了。 我得到一个有效的JWT,当我通过以下代码传递它时,firebase中间件(5.x)接受令牌(如果有效),并拒绝令牌(如果无效)。 进行验证的代码位于我的AuthServiceProvider.php内:

<?php

namespace App\Providers;

use App\User;
use Firebase\JWT\JWT;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\ServiceProvider;


//new Code
class AuthServiceProvider extends ServiceProvider
{

    public function register()
    {
        //
    }

     public function boot()
     {
       // Here you may define how you wish users to be authenticated for your Lumen
       // application. The callback which receives the incoming request instance
       // should return either a User instance or null. You're free to obtain
       // the User instance via an API token or any other method necessary.

       $this->app['auth']->viaRequest('api', function ($request) {
         $key = 'pawifjopawiejfpoaiwejfpoji';
         $jwt = preg_replace('/^Bearer (.*)/', '$1', $request->header('Authorization'));
         $decoded = JWT::decode($jwt, $key, ['HS256']);

         //return User::where('email', $decoded->email)->first();
         return "Hello From Auth!";
       });
     }
}

调用中间件并将其结果路由到控制器的路由器位于web.php中,如下所示:

$router->get('myStorage', ['middleware' => 'auth', 'uses' => 'AuthController@myStorage']);

现在,我的问题是这样的: 我研究了providers / AuthServiceProvider.php,ServiceProvider.php,insinde vendor / Illuminate / Support,app / http / middleware内部的Authenticate.php以及bootstrap / app.php内部的所有依赖关系。 “ auth”密钥/分母在源代码中多次出现,并且在路由过程中还引用了认证中间件,这对我来说仍然是一个谜。 我不知道它指向什么对象。

我已经在所有找到它的地方(见上文)测试过将其更改为“ auth2”,但是随后我得到了Lumen抛出的异常:

(2/2) BindingResolutionException

Target class [auth2] does not exist.

因此,必须在某个地方定义了此类。 在Authenticate.php内部,代码开头有这一行

use Illuminate\Contracts\Auth\Factory as Auth;

我已经对其进行了操纵,以及它在authenticate.php整个代码中的出现。 但是我总是得到同样的错误。

我想知道这个“身份验证”的来源,因为我还想在身份验证之后使用中间件进行身份验证。 然后,路线将看起来像这样:

$router->get('myStorage', ['middleware' => ['authenticate', 'authorize'], 'uses' => 'AuthController@myStorage']);

要做到这一点,我认为我需要更好地了解这种(第三方)中间件/组件的定义方式和位置。否则,例如在注册此材料时,我可能会遇到问题。

0 个答案:

没有答案