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