如何在 Laravel 8 中实现多重认证守卫
介绍
一位经验丰富的 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 存储库,您可以克隆和使用代码。