我目前正在学习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']);
要做到这一点,我认为我需要更好地了解这种(第三方)中间件/组件的定义方式和位置。否则,例如在注册此材料时,我可能会遇到问题。