Laravel 多用户多表登陆的第三方扩展包 passport-multiauth(二)
面试官 CTO 给的一道基于 Laravel 多用户多表登陆 API 技术课题(一)
接下来将对课题进行任务分解,一步步解决课题要求。
1.创建基于 Laravel 5.5 LTS 的项目 multiauthlaravel
composer create-project laravel/laravel multiauthlaravel --prefer-dist "5.5.*"
修改 hosts 和 Homestead.yaml 文件,做简单的开发配置
重启虚拟机,就可以打开本地网址看到欢迎页面了。
cd ~/Homestead && vagrant provision && vagrant reload
因为Laravel 5.5是比较老的版本了,低版本的Passport有paragonie/random_compat 最新版本冲突的问题,需要安装 2.0 的版本。
composer require paragonie/random_compat:^2.0
查阅Laravel多用户多表登陆的第三方扩展包passport-multiauth文档,已经包含了Laravel Passport ,直接安装与5.5相对应的包即可。
composer require smartins/passport-multiauth ~3.0
因遵循 MVC 的最佳实践而需要把模型文件放置于 app/Models 目录下,故移动User.php到Models文件夹,修改相应的命名空间namespace App\Models,执行全局搜索App\User 替换为 App\Models\User。
因为主要角色分为教师和学生,存储在teachers 和 students表,所以分别创建模型文件,同时顺便创建数据库迁移文件
php artisan make:model Models/Student -m
php artisan make:model Models/Teacher -m
参照 User.php 以及相应的数据库迁移文件,修改 Student.php 和Teacher.php 以及与之相对应的数据库迁移文件。以下为简化说明,仅提供学生相应代码,老师的代码做相应的Copy即可。
Student.php
<?php
namespace App\Models;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class Student extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
}
xxxx_xx_xx_xxxxxx_create_students_table.php
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateStudentsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('students', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('students');
}
}
接下来根据passport-multiauth文档进行相应的配置,也可以结合本人 Github上 Commit 的代码来理解。 因篇幅过大,而且也只是照抄大神代码的配置,在这里不再重复一一复现详细的代码。
生成假数据文件并修改。
php artisan make:seed StudentsAndTeacherSeeder
StudentsAndTeacherSeeder.php
<?php
use App\Models\Student;
use App\Models\Teacher;
use Illuminate\Database\Seeder;
class StudentsAndTeacherSeeder extends Seeder {
/**
* Run the database seeds.
*
* @return void
*/
public function run() {
Student::query()->truncate();
Student::create([
"name" => "alan",
"email" => "alan@gmail.com",
'password' => bcrypt('test'),
]);
Teacher::query()->truncate();
Teacher::create([
"name" => "kobe",
"email" => "kobe@gmail.com",
'password' => bcrypt('test'),
]);
}
}
导入数据库
php artisan db:seed --class=StudentsAndTeacherSeeder
使用Postman进行Api测试,以学生为例,成功获取 token ,结果如下图所示:
到此,多用户多表Api部署成功了。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: