今年早些时候发布的LaravelSanctum(以前称为LaravelAirlock)是一个轻量级扩展,它使验证可以构建在单页应用程序或本机移动应用程序上,过程变得一样简单和尽可能无痛。在此之前,你要么使用基于session的web中间件,要么使用外部集成的依赖包,比如Tymon的jwt-auth,而现在,你可以使用Sanctum来完成statefulauthentication和token-basedauthentication。在这个简短的测试中,我将向您展示如何使用LaravelSanctum从头开始??构建一个项目。我们将创建一个虚拟API,通过Vue组件对用户进行身份验证,并获取与该登录用户关联的数据。准备好了,接下来,一起来装盘吧!创建一个测试API我们需要做的第一件事是创建一个API接口,我们可以从中获取数据。我想出了一个超级简单的应用程序,它可以检索显示每个用户的秘密列表。我已经安装了开箱即用的Laravel应用程序,并使用LaravelDocker设置将其配置为在我的本地环境中与MySQL数据库一起运行。我要做的第一件事就是为我们的secret创建一个模型类和相关的迁移文件,这里我们可以很方便的使用artisan通过命令行来完成这些操作。phpartisanmake:modelSecret--migration接下来,让我们打开迁移文件并添加一些描述秘密需求的数据列。我认为我们需要的(除了Laravel提供的默认ID和时间戳之外)是一个与用户相关联的user_id整数字段,以及一个实际保存用户秘密信息的字段。Schema::create('secrets',function(Blueprint$table){$table->id();$table->integer('user_id');$table->text('secret');$table->时间戳();});然后,运行数据库迁移命令生成用户和机密两张表。phpartisanmigrate我们需要对应用程序的两个模型类进行一些简单的修改,使两个模型类之间的关系,所以我们打开两个模型类文件,开始修改://User.phppublicfunctionsecrets(){return$this->hasMany('App\Secret');}//Secret.phppublicfunctionuser(){return$this->belongsTo('App\User');}我们API结构的最后一部分是实际路线和控制器。我们只会访问一个网页路径来显示当前用户的所有机密信息。因此,我将以下内容添加到routes/api.php文件中:Route::get('/secrets','SecretController@index');使用Artisan命令可以轻松创建此控制器:phpartisanmake:controllerSecretControlleropen我们刚刚创建的控制器,让我们先创建一个返回所有键的索引方法。由于我们还不能获得经过身份验证的用户:publicfunctionindex(){returnApp\Secret::all();}我们的虚拟API现在已经完成,让我们创建一些假用户和秘密。填充数据库您可以轻松地直接进入数据库并手动填充用户,创建控制器和表单供用户输入自己的数据,或者使用Artisantinker半自动创建用户。我将跳过这些方法并使用内置的Laravel工厂为我们的用户和密钥生成虚假数据。Laravel附带了一个开箱即用的UserFactory.php类,用于生成虚假用户。我们将为键创建一个类似的工厂类。在终端运行以下Artisan命令:phpartisanmake:factorySecretFactory--model=Secret打开生成的文件,我们只需要为每个模型填充user_id和secret这两个数据:$factory->define(Secret::class,function(Faker$faker){return['user_id'=>1,'secret'=>$faker->text];});您可能想知道为什么我们要在上面的代码片段中对user_id进行硬编码。因为我不想根据用户数量随机生成它,而是想对它有更多的控制权。稍后,我将向您展示如何在我们开始生成机密时覆盖它。让我们从创建一些假用户开始。通过从站点根目录运行phpartisantinker命令打开TinkerShell。打开后,我们可以通过运行全局工厂助手两次来创建两个用户:factory(App\User::class)->create();//与make不同,create将我们的用户保存在数据库中现在我们已经生成了它们,让我们创建我们的秘密。我将在tinkershell中运行以下命令两次,为user_id1创建两个:让我们创建我们的密钥。我在tinker中运行以下命令两次,为user_id1创建两个秘密:factory(App\Secret::class)->create();但是,如果第二个秘密的用户具有不同的ID怎么办?覆盖工厂类中的任何值很容易,我们所要做的就是将覆盖数组传递给create()方法。因此,我们将运行以下命令两次,为第二个假用户创建两个秘密:factory(App\Secret::class)->create(['user_id'=>2]);我们的数据库中填充了足够多的假数据,让我们继续安装和准备LaravelSanctum包。安装LaravelSanctum非常容易,只需在终端中运行一些命令即可完成。首先,让我们使用Composer安装包:composerrequirelaravel/sanctum接下来运行以下命令发布迁移文件(并运行迁移):phpartisanvendor:publish--provider="Laravel\Sanctum\SanctumServiceProvider"phpartisanmigrateSanctum安装最后一部分要求我们修改app\Http\Kernel.php文件以包含一个中间件,它将Laravel的会话cookie注入我们的应用程序前端。这最终将允许我们作为经过身份验证的用户传递和检索数据:'api'=>[EnsureFrontendRequestsAreStateful::class,'throttle:60,1']现在我们可以进入应用程序的前端了!构建前端从Laravel7开始,前端和身份验证模板已从主包中剥离出来,可以单独安装。为了演示,我们将使用它和Vue来构建前端。在应用程序的根目录运行以下命令将帮助我们配置环境:composerrequirelaravel/uiphpartisanuivue--authnpminstall&&npmrundev上面的命令做了三件事:使用Composer安装LaravelUI包生成JS/UI文件、认证模板、package.json修改安装前端依赖,编译开发环境的JS/CSS文件删除div中的内容,增加id="app"属性。这将是我们的Vue应用程序的挂载点,如我们刚刚生成的app.js文件中所述。让我们创建一个Vue组件,它将保存我们的登录表单并显示一些秘密。在创建Vue组件之前,我们可以通过命令:phpartisanuivue快速生成我们的前端代码,默认会生成一个resources/js/components/ExampleComponent.vue组件示例。好了,现在我们新建一个组件:SecretComponent.vue,它的代码如下:有两个字段要返回,其中secrets字段是一个数组,还有一个formData对象,存储了用户的email和password字段。接下来,我们将在模板标签内构建我们的登录表单。
