如何在 Laravel 8 中实现多重认证守卫

言鼎科技 2023-06-27 427

介绍

一位经验丰富的 Laravel 开发人员肯定经常使用“多个守卫”。但是,如果您刚接触这项技术,那么多重身份验证保护的概念可能不会那么熟悉。

在 Laravel 应用程序中使用多重身份验证的原因有很多。

  • 处理许多用户。

  • 单个应用程序用于客户和员工连接公司产品和服务。

  • 适用于多个部门的应用程序。

因此,如果您正在寻找有关如何在 Laravel 8 中实现多个身份验证保护的教程,那么这里有一个分步指南供您使用。在此应用程序中,我们使用单独的登录名和表来进行管理员和博客身份验证。

教程目标:Laravel 8 中的多个身份验证守卫

在开始开发之前,让我们先看看多重保护认证如何工作的视频。在我们的演示中,我们使用了两种登录方式,一种用于博主,另一种用于管理员。

初始设置

通过以下命令创建应用程序


作曲家创建项目 --prefer-dist laravel/laravel laravel_guardcd laravel_guard

打开。env 文件并更新数据库详细信息

创建迁移和模型

使用以下命令为管理员和博客创建迁移和模型


php artisan make:模型管理-mphp artisan make:model 博客-m

像用户的迁移表一样更新admin和blog的迁移文件,或者你也可以通过添加应用程序需要的字段来扩展表。

减少麻烦。核心开发。
从我们这里聘请 Laravel 开发人员来满足您的自定义应用程序开发需求;因此您可以专注于其他核心业务活动。

定义守卫

转到我们教程的主要部分:Laravel 8 中的多个身份验证守卫。Guards 定义如何为每个请求验证 admin 和 blogger。我们的应用程序将有两个守卫 Admin 和 Blogger;在定义守卫之后设置他们的提供者。当我们使用这些守卫时,它会告诉我们使用什么来进行身份验证或验证。打开管理员.php归档应用程序/模型文件夹。将守卫更新为管理员和带有字段名称的可填充数组

// 管理.php


<?php命名空间 App\Models;使用 Illuminate\Foundation\Auth\User 作为可验证的;
  Admin 类扩展了 Authenticatable
   {
       受保护的 $guard = 'admin';
       受保护的 $fillable = [
           '姓名','电子邮件','密码',
       ];
       保护 $隐藏 = [
           '密码','remember_token',
       ];}

app/model文件夹中,打开Blogger.php然后用 blog 更新 guards 并用字段名称填充数组

// 博客.php


<?php命名空间 App\Models;使用 Illuminate\Foundation\Auth\User 作为可验证的;
   类博客扩展可验证
   {
       受保护的 $guard = '博客';
      受保护的 $fillable = [
           '姓名','电子邮件','密码',
       ];
       保护 $隐藏 = [
           '密码','remember_token',
     ];}

打开config/auth.php添加守卫。我们添加了两个守卫:admin 和 blog 并更新了他们提供者的数组。


'守卫'=> [
       '网络'=> [
           '驱动程序'=>'会话',
           '提供者' => '用户',
       ],
        '管理员'=> [
           '驱动程序'=>'会话',
           '提供者' => '管理员',
       ],
     
       '博客'=> [
           '驱动程序'=>'会话',
           '提供者' => '博客',
       ],
   ],
  '供应商'=> [
       '用户'=> [
           '司机'=>'雄辩',
           'model' => App\Models\User::class,
       ],
         '管理员'=> [
           '司机'=>'雄辩',
           'model' => App\Models\Admin::class,
       ],
       '博客'=> [
           '司机'=>'雄辩',
           'model' => App\Models\Blog::class,
       ],
   ],

设置控制器

在 Auth 文件夹中打开登录控制器。

对于守卫操作,我们将更新 auth 文件夹中现有的登录控制器或创建一个新的控制器。我们需要在控制器中定义所有访客,如果博主或管理员成功登录,它将重定向到预期的路由。


中间件('来宾')->除了('注销');
           $this->middleware('guest:admin')->except('logout');
           $this->middleware('guest:blog')->except('logout');
   }

    公共功能 showAdminLoginForm()
   {
       return view('auth.login', ['url' => 'admin']);
   }

   公共函数登录(请求 $request)
   {
       $this->验证($请求,[
           '电子邮件' => '必填|电子邮件',
           '密码'=>'需要|分钟: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(请求 $request)
   {
       $this->验证($请求,[
           '电子邮件' => '必填|电子邮件',
           '密码'=>'需要|分钟: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'));
   }}

登录功能检查管理员凭据并重定向,博客登录功能检查博客凭据并重定向到预期路由。

更新注册控制器

在 Laravel 8 中实现多个身份验证守卫的这一部分中,我们将简单地更新 RegisterController。为此,打开 RegisterController 并添加以下代码。

//注册控制器


中间件('客人');
       $this->middleware('guest:admin');
       $this->middleware('guest:blog');
   }
   受保护的函数验证器(数组 $data)
   {
       返回验证器::制作($数据,[
           'name' => 'required|string|max:255',
           'email' => 'required|string|email|max:255|unique:users',
           '密码' => '必填|字符串|最小值:6|已确认',
       ]);
   }
      公共功能 showAdminRegisterForm()
   {
       return view('auth.register', ['url' => 'admin']);
   }
      公共功能 showBloggerRegisterForm()
   {
       return view('auth.register', ['url' => 'blog']);
   }
      受保护的函数创建(数组 $data)
   {
       返回用户::创建([
           '名称' => $数据['名称'],
           '电子邮件' => $data['电子邮件'],
           '密码' => Hash::make($data['密码']),
       ]);
   }
       受保护的函数 createAdmin(请求 $request)
   {
       $this->validator($request->all())->validate();
       管理员::创建([
           '名字' => $request->名字,
           'email' => $request->email,
           '密码' => Hash::make($request->password),
       ]);
       return redirect()->intended('login/admin');
   }
       受保护的函数 createBlogger(请求 $request)
   {
       $this->validator($request->all())->validate();
       博客::创建([
           '名字' => $request->名字,
           'email' => $request->email,
           '密码' => Hash::make($request->password),
       ]);
       return redirect()->intended('登录/博客');
   }}

设置验证

  • 现在,为 Laravel 安装身份验证

  • 在 web.php 文件中设置 url

  • 为管理员和博主仪表板创建刀片文件

为 Guards 设置中间件

打开RedirectIfAuthenticated.php文件并使用以下代码更新。在这里,中间件将 guard 作为参数并重定向到预期的路由


查看()) {
           返回重定向('/管理员');
       }
       如果 ($guard == "blog" && Auth::guard($guard)->check()) {
           返回重定向('/博客');
       }
       如果 (Auth::guard($guard)->check()) {
           返回重定向('/家');
       }
       返回 $next($request);
   }}

设置异常

移至身份验证异常处理程序。这是为了确保当管理员尝试登录/admin时,他们将被重定向到/login/admin/blog。打开 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'));
   }}

运行应用程序

使用以下命令运行应用程序


php 工匠服务

如果你想克隆这里的存储库源代码:multiple-guard-authentication

结论

所以,这是关于如何在 Laravel 8 中实现多个身份验证守卫。我希望本教程的目的已达到您的预期。如果您有任何建议或反馈,请随时与我们联系。访问Laravel 教程页面以获取更多此类分步指南。每个教程都将提供 github 存储库,您可以克隆和使用代码。

言鼎科技

The End