Laravel 多使用者多表登陸的第三方擴充套件包 passport-multiauth(二)

Sloth發表於2020-02-04

面試官 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即可。

<?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 協議》,轉載必須註明作者和本文連結

一直在學習,從未停止,終身學習。

相關文章