Laravel 多用户多表登陆的第三方扩展包 passport-multiauth(二)

面试官 CTO 给的一道基于 Laravel 多用户多表登陆 API 技术课题(一)

接下来将对课题进行任务分解,一步步解决课题要求。

1.创建基于 Laravel 5.5 LTS 的项目 multiauthlaravel

composer create-project laravel/laravel multiauthlaravel --prefer-dist "5.5.*"

Laravel多用户多表登陆的第三方扩展包passport-multiauth(二)

修改 hostsHomestead.yaml 文件,做简单的开发配置

重启虚拟机,就可以打开本地网址看到欢迎页面了。

cd ~/Homestead && vagrant provision && vagrant reload

Laravel多用户多表登陆的第三方扩展包passport-multiauth(二)

因为Laravel 5.5是比较老的版本了,低版本的Passport有paragonie/random_compat 最新版本冲突的问题,需要安装 2.0 的版本。

 composer require paragonie/random_compat:^2.0

Laravel多用户多表登陆的第三方扩展包passport-multiauth(二)

查阅Laravel多用户多表登陆的第三方扩展包passport-multiauth文档,已经包含了Laravel Passport ,直接安装与5.5相对应的包即可。

composer require smartins/passport-multiauth ~3.0

Laravel多用户多表登陆的第三方扩展包passport-multiauth(二)

因遵循 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 ,结果如下图所示:

Laravel多用户多表登陆的第三方扩展包passport-multiauth(二)

到此,多用户多表Api部署成功了。

本作品采用《CC 协议》,转载必须注明作者和本文链接
一直在学习,从未停止,终身学习。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!