笔记 - Laravel-MultiAuthGuard 多重身份组

参考资料:

How to use multiple authentication guards in a Laravel appLaravel Authentication

目的

使 Laravel 除了原本 User 资料表外的资料表也可以当作纪录登入资讯使用。

一、 建立资料表

使用指令建立资料表:

php artisan make:migration create_admins_table

资料表内容如下:

public function up(){Schema::create('admins', function (Blueprint $table) {$table->id();$table->string('name');$table->string('username')->unique();$table->string('password');$table->rememberToken();$table->timestamps();});}

二、建立 Model

使用指令建立 Model:

php artisan make:model Admin

Model 内引入 Illuminate\Foundation\Auth\User 后将 extends 改为 Authenticatable,并设置 $guard,完整内容如下:

<?phpnamespace App\Models;use Illuminate\Database\Eloquent\Factories\HasFactory;use Illuminate\Database\Eloquent\Model;use Illuminate\Foundation\Auth\User as Authenticatable;class Admin extends Authenticatable{    use HasFactory;    protected $guard = 'admin';    protected $fillable = [        'name', 'username', 'password',    ];    protected $hidden = [        'password', 'remember_token',    ];}

三、定义 guards

打开 config/auth.php,并新增新的 guard 与 provider:

    'guards' => [        'web' => [            'driver' => 'session',            'provider' => 'users',        ],        'admin' => [            'driver' => 'session',            'provider' => 'admins',        ],    ],        ...            'providers' => [        'users' => [            'driver' => 'eloquent',            'model' => App\Models\User::class,        ],        'admins' => [            'driver' => 'eloquent',            'model' => App\Models\Admin::class,        ],    ],

四、透用 Seeder 新增帐号

使用指令建立 Seeder:

php artisan make:seeder CreateAdmin 

打开 database/seeders/CreateAdmin.php,并加入:

use Illuminate\Support\Facades\DB;use Illuminate\Support\Facades\Hash;...public function run(){DB::table('admins')->insert(['name' => 'admin','username' => 'admin','password' => Hash::make('123456'),]);}

然后运行上面写的 Seeder:

php artisan db:seed --class=CreateAdmin

五、建立登入

这边以 Livewire 为例:

namespace App\Http\Livewire\Auth;use Livewire\Component;use Illuminate\Support\Facades\Auth;class Login extends Component{    public $username;    public $password;    public $remember = false;    protected $rules = [        'username' => 'required',        'password' => 'required|min:6',    ];    public function login()    {        if (Auth::guard('admin')->attempt($this->validate(), $this->remember)) {            // 登入成功            return redirect('/posts');        }    }    public function render()    {        return view('livewire.auth.login')            ->layout('layouts.base');    }}

六、限制路由

开启 routes/web.php,并把要登入才能看得页面套上 middleware:

Route::middleware(['auth:admin', 'auth.session'])->group(function () {    Route::get('/posts', App\Http\Livewire\Post\ShowPostList::class);});

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章