如何在 Laravel 8 中實(shí)現(xiàn)多重認(rèn)證守衛(wèi)

言鼎科技 2023-06-27 410

介紹

一位經(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ù),您可以克隆和使用代碼。

言鼎科技

The End