我正在运行一个新的Laravel 6.x Lumen Install。我试图了解身份验证的工作原理,并且已经完成了一些教程。
现在我有以下代码AuthServiceProvider.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
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Boot the authentication services for the application.
*
* @return void
*/
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();
});
}
}
特别是在我的脸上涂上问号的这一部分:
首先,我不知道$ this到底代表什么。我知道$ this基本上是类本身的类/实例,但是如果是这样,它的属性“ app”是什么。对我而言,“ app”应代表整个app,即整个流明项目的一个实例。但这在我看来并没有多大意义,因为$ this仅表示serviceprovider类的实例,而该实例本身并不表示完整的应用程序。那么,索引“ auth”究竟引用了什么?它引用什么,可以在哪里查找其定义(我假设它是一个类)。接下来,viaRequest()的参数如何工作?默认情况下,第一个参数是“ api”,所以我想这是某种配置,但是我还有其他选择,在哪里可以找到呢?到目前为止,我尚未在官方文档中找到任何内容:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Lumen框架中,$this->app
实际上是指向Lumen应用容器(Service Container)的引用。Laravel和Lumen都使用服务容器作为依赖注入和管理各种服务(如路由、中间件、配置等)的核心机制。这个容器是一个用于管理类依赖和实例化对象的工具。
当您看到$this->app['auth']
时,这里是在从服务容器中解析认证(Authentication)服务。"auth"是一个键,对应于服务容器中注册的一个服务提供者(ServiceProvider)或闭包,它负责处理认证逻辑。在Lumen中,认证服务通常由Illuminate\Auth\AuthServiceProvider管理,该服务提供者定义了如何处理用户认证,包括通过请求进行认证的逻辑。
关于viaRequest()
方法,这是Lumen/Laravel框架中认证门面(Auth Facade)的一部分,用于定义自定义的认证机制。它的作用是告诉框架如何根据传入的HTTP请求来验证用户身份。方法接受两个参数:
第一个参数:字符串,通常是请求类型或者认证守卫(guard)的名称。默认为"api",意味着你正在配置API认证方式。你可以有多个守卫定义在配置文件中,比如web、admin等,具体取决于你的应用程序需求。
第二个参数:一个闭包,接收一个请求(Request)实例作为参数,并应返回一个User实例(如果认证成功)或null(如果认证失败)。在你的代码示例中,它检查请求头中的JWT令牌,解码后用电子邮件查找数据库中的用户。
要了解更多关于认证守卫和其他认证选项的详细信息,虽然Lumen的官方文档可能不如Laravel详尽,但你可以参考Laravel的文档,因为它们在认证系统上非常相似。特别是关于多认证守卫的部分,可以给你更多关于如何配置和使用不同类型的认证守卫的见解。对于JWT具体的实现细节,你也可以查阅Laravel的JWT认证教程或者针对Lumen的JWT包文档,比如Tymon/jwt-auth,如果你使用的是这个库的话。