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 协议》,转载必须注明作者和本文链接
          
                    
                    
          
          
                关于 LearnKu
              
                    
                    
                    
 
推荐文章: