如何在 Laravel 8 中實(shí)現(xiàn)多重認(rèn)證守衛(wèi)
介紹
一位經(jīng)驗(yàn)豐富的 Laravel 開(kāi)發(fā)人員肯定經(jīng)常使用“多個(gè)守衛(wèi)”。但是,如果您剛接觸這項(xiàng)技術(shù),那么多重身份驗(yàn)證保護(hù)的概念可能不會(huì)那么熟悉。
在 Laravel 應(yīng)用程序中使用多重身份驗(yàn)證的原因有很多。
處理許多用戶。
單個(gè)應(yīng)用程序用于客戶和員工連接公司產(chǎn)品和服務(wù)。
適用于多個(gè)部門(mén)的應(yīng)用程序。
因此,如果您正在尋找有關(guān)如何在 Laravel 8 中實(shí)現(xiàn)多個(gè)身份驗(yàn)證保護(hù)的教程,那么這里有一個(gè)分步指南供您使用。在此應(yīng)用程序中,我們使用單獨(dú)的登錄名和表來(lái)進(jìn)行管理員和博客身份驗(yàn)證。
教程目標(biāo):Laravel 8 中的多個(gè)身份驗(yàn)證守衛(wèi)
在開(kāi)始開(kāi)發(fā)之前,讓我們先看看多重保護(hù)認(rèn)證如何工作的視頻。在我們的演示中,我們使用了兩種登錄方式,一種用于博主,另一種用于管理員。
初始設(shè)置
通過(guò)以下命令創(chuàng)建應(yīng)用程序
作曲家創(chuàng)建項(xiàng)目 --prefer-dist laravel/laravel laravel_guardcd laravel_guard
打開(kāi)。env 文件并更新數(shù)據(jù)庫(kù)詳細(xì)信息
創(chuàng)建遷移和模型
使用以下命令為管理員和博客創(chuàng)建遷移和模型
php artisan make:模型管理-mphp artisan make:model 博客-m
像用戶的遷移表一樣更新admin和blog的遷移文件,或者你也可以通過(guò)添加應(yīng)用程序需要的字段來(lái)擴(kuò)展表。
減少麻煩。核心開(kāi)發(fā)。
從我們這里聘請(qǐng) Laravel 開(kāi)發(fā)人員來(lái)滿足您的自定義應(yīng)用程序開(kāi)發(fā)需求;因此您可以專注于其他核心業(yè)務(wù)活動(dòng)。
定義守衛(wèi)
轉(zhuǎn)到我們教程的主要部分:Laravel 8 中的多個(gè)身份驗(yàn)證守衛(wèi)。Guards 定義如何為每個(gè)請(qǐng)求驗(yàn)證 admin 和 blogger。我們的應(yīng)用程序?qū)⒂袃蓚€(gè)守衛(wèi) Admin 和 Blogger;在定義守衛(wèi)之后設(shè)置他們的提供者。當(dāng)我們使用這些守衛(wèi)時(shí),它會(huì)告訴我們使用什么來(lái)進(jìn)行身份驗(yàn)證或驗(yàn)證。打開(kāi)管理員.php歸檔應(yīng)用程序/模型文件夾。將守衛(wèi)更新為管理員和帶有字段名稱的可填充數(shù)組
// 管理.php
<?php命名空間 App\Models;使用 Illuminate\Foundation\Auth\User 作為可驗(yàn)證的;
Admin 類擴(kuò)展了 Authenticatable
{
受保護(hù)的 $guard = 'admin';
受保護(hù)的 $fillable = [
'姓名','電子郵件','密碼',
];
保護(hù) $隱藏 = [
'密碼','remember_token',
];}
在app/model文件夾中,打開(kāi)Blogger.php然后用 blog 更新 guards 并用字段名稱填充數(shù)組
// 博客.php
<?php命名空間 App\Models;使用 Illuminate\Foundation\Auth\User 作為可驗(yàn)證的;
類博客擴(kuò)展可驗(yàn)證
{
受保護(hù)的 $guard = '博客';
受保護(hù)的 $fillable = [
'姓名','電子郵件','密碼',
];
保護(hù) $隱藏 = [
'密碼','remember_token',
];}
打開(kāi)config/auth.php添加守衛(wèi)。我們添加了兩個(gè)守衛(wèi):admin 和 blog 并更新了他們提供者的數(shù)組。
'守衛(wèi)'=> [
'網(wǎng)絡(luò)'=> [
'驅(qū)動(dòng)程序'=>'會(huì)話',
'提供者' => '用戶',
],
'管理員'=> [
'驅(qū)動(dòng)程序'=>'會(huì)話',
'提供者' => '管理員',
],
'博客'=> [
'驅(qū)動(dòng)程序'=>'會(huì)話',
'提供者' => '博客',
],
],
'供應(yīng)商'=> [
'用戶'=> [
'司機(jī)'=>'雄辯',
'model' => App\Models\User::class,
],
'管理員'=> [
'司機(jī)'=>'雄辯',
'model' => App\Models\Admin::class,
],
'博客'=> [
'司機(jī)'=>'雄辯',
'model' => App\Models\Blog::class,
],
],
設(shè)置控制器
在 Auth 文件夾中打開(kāi)登錄控制器。
對(duì)于守衛(wèi)操作,我們將更新 auth 文件夾中現(xiàn)有的登錄控制器或創(chuàng)建一個(gè)新的控制器。我們需要在控制器中定義所有訪客,如果博主或管理員成功登錄,它將重定向到預(yù)期的路由。
中間件('來(lái)賓')->除了('注銷');
$this->middleware('guest:admin')->except('logout');
$this->middleware('guest:blog')->except('logout');
}
公共功能 showAdminLoginForm()
{
return view('auth.login', ['url' => 'admin']);
}
公共函數(shù)登錄(請(qǐng)求 $request)
{
$this->驗(yàn)證($請(qǐng)求,[
'電子郵件' => '必填|電子郵件',
'密碼'=>'需要|分鐘:6'
]);
if (Auth::guard('admin')->attempt(['email' => $request->email, 'password' => $request->password], $request->get('remember')) ) {
return redirect()->intended('/admin');
}博客
return back()->withInput($request->only('email', 'remember'));
}
公共功能 showBloggerLoginForm()
{
return view('auth.login', ['url' => 'blog']);
}
公共功能 bloggerLogin(請(qǐng)求 $request)
{
$this->驗(yàn)證($請(qǐng)求,[
'電子郵件' => '必填|電子郵件',
'密碼'=>'需要|分鐘:6'
]);
if (Auth::guard('blog')->attempt(['email' => $request->email, 'password' => $request->password], $request->get('remember')) ) {
return redirect()->intended('/blog');
}
return back()->withInput($request->only('email', 'remember'));
}}
登錄功能檢查管理員憑據(jù)并重定向,博客登錄功能檢查博客憑據(jù)并重定向到預(yù)期路由。
更新注冊(cè)控制器
在 Laravel 8 中實(shí)現(xiàn)多個(gè)身份驗(yàn)證守衛(wèi)的這一部分中,我們將簡(jiǎn)單地更新 RegisterController。為此,打開(kāi) RegisterController 并添加以下代碼。
//注冊(cè)控制器
中間件('客人');
$this->middleware('guest:admin');
$this->middleware('guest:blog');
}
受保護(hù)的函數(shù)驗(yàn)證器(數(shù)組 $data)
{
返回驗(yàn)證器::制作($數(shù)據(jù),[
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'密碼' => '必填|字符串|最小值:6|已確認(rèn)',
]);
}
公共功能 showAdminRegisterForm()
{
return view('auth.register', ['url' => 'admin']);
}
公共功能 showBloggerRegisterForm()
{
return view('auth.register', ['url' => 'blog']);
}
受保護(hù)的函數(shù)創(chuàng)建(數(shù)組 $data)
{
返回用戶::創(chuàng)建([
'名稱' => $數(shù)據(jù)['名稱'],
'電子郵件' => $data['電子郵件'],
'密碼' => Hash::make($data['密碼']),
]);
}
受保護(hù)的函數(shù) createAdmin(請(qǐng)求 $request)
{
$this->validator($request->all())->validate();
管理員::創(chuàng)建([
'名字' => $request->名字,
'email' => $request->email,
'密碼' => Hash::make($request->password),
]);
return redirect()->intended('login/admin');
}
受保護(hù)的函數(shù) createBlogger(請(qǐng)求 $request)
{
$this->validator($request->all())->validate();
博客::創(chuàng)建([
'名字' => $request->名字,
'email' => $request->email,
'密碼' => Hash::make($request->password),
]);
return redirect()->intended('登錄/博客');
}}
設(shè)置驗(yàn)證
現(xiàn)在,為 Laravel 安裝身份驗(yàn)證
在 web.php 文件中設(shè)置 url
為管理員和博主儀表板創(chuàng)建刀片文件
為 Guards 設(shè)置中間件
打開(kāi)RedirectIfAuthenticated.php文件并使用以下代碼更新。在這里,中間件將 guard 作為參數(shù)并重定向到預(yù)期的路由
查看()) {
返回重定向('/管理員');
}
如果 ($guard == "blog" && Auth::guard($guard)->check()) {
返回重定向('/博客');
}
如果 (Auth::guard($guard)->check()) {
返回重定向('/家');
}
返回 $next($request);
}}
設(shè)置異常
移至身份驗(yàn)證異常處理程序。這是為了確保當(dāng)管理員嘗試登錄/admin時(shí),他們將被重定向到/login/admin或/blog。打開(kāi) app/Exceptions 并使用以下代碼。
expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}
如果 ($request->is('admin') || $request->is('admin/*')) {
return redirect()->guest('/login/admin');
}
如果 ($request->is('blog') || $request->is('blog/*')) {
return redirect()->guest('/login/blog');
}
return redirect()->guest(route('login'));
}}
運(yùn)行應(yīng)用程序
使用以下命令運(yùn)行應(yīng)用程序
php 工匠服務(wù)
如果你想克隆這里的存儲(chǔ)庫(kù)源代碼:multiple-guard-authentication
結(jié)論
所以,這是關(guān)于如何在 Laravel 8 中實(shí)現(xiàn)多個(gè)身份驗(yàn)證守衛(wèi)。我希望本教程的目的已達(dá)到您的預(yù)期。如果您有任何建議或反饋,請(qǐng)隨時(shí)與我們聯(lián)系。訪問(wèn)Laravel 教程頁(yè)面以獲取更多此類分步指南。每個(gè)教程都將提供 github 存儲(chǔ)庫(kù),您可以克隆和使用代碼。