Laravel 中的多角色身份验证

2025-06-07

Laravel 中的多角色身份验证

嘿,伙计们,在本文中,我将向您展示如何在 Laravel 中实现基于多个角色的身份验证,即使您分别有许多不同的用户和多个仪表板。

在我们深入研究如何实现这一目标之前,让我先分析一下我在一家公司工作时遇到的场景或问题,这让我花了将近两周的时间才弄清楚。

在这个项目中,我遇到了六 (6) 个不同的用户及其各自的仪表板,这些用户如下:

  1. 超级管理员
  2. 行政
  3. 玩家
  4. 团队
  5. 学者
  6. 侦察兵

因此,问题是在成功登录后将用户重定向到各自的仪表板,并限制对任何其他仪表板的访问,即使他们输入了 URL 或尝试访问其他仪表板,也应该将他们重定向回其默认仪表板。

当我阅读许多博客文章、视频教程和提问时,我发现每当我成功实施解决方案时,我总是会在安全测试/检查期间发现错误,例如“太多重定向错误”或允许登录的玩家访问侦察仪表板等。

我还发现了许多解决方案,例如使用保护装置、中间件等,这些都有很大帮助。

入门

说了这么多琐事,让我来谈谈如何在 Laravel 中成功实现多个基于角色的身份验证,并让我免去两周的不眠之夜。

我们将从安装一个全新的 Laravel 项目开始,如果您愿意的话,可以跳过这些步骤。

创建一个全新的 Laravel

假设您已安装 php 7.* 和 composer,请在项目文件夹中输入以下命令。您可以点击此处了解如何安装 Laravel。

composer create-project --prefer-dist laravel/laravel MultiAuth

设置数据库和.ENV文件

下一步是设置数据库迁移并配置环境文件。转到 phpMyAdmin 并创建一个数据库。

打开您的用户迁移文件并添加以下列

<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('phone');
$table->string('state');
$table->string('email')->unique();
$table->integer('role');
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->integer('status_id')->nullable();
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}

之后,打开你的 .env 文件并传入你的数据库凭据

运行迁移

php artisan migrate

您可以设置数据库播种机来用数据填充数据库,也可以手动添加数据,无论哪种方式都很好,或者您可以简单地使用我的代码示例,因为我已经为这个示例设置了一个数据库播种机。

设置用户授权。

设置数据库并运行迁移后,下一步是使用 Laravel 默认身份验证,这对于我们的示例来说很好,感谢 Laravel 团队。

只需运行:

php artisan make:auth

您应该成功设置一个完整的开箱即用的用户注册和登录系统,现在通过键入访问您新创建的 Laravel 项目。

php artisan serve

然后在浏览器中输入127.0.0.1:8000。此时,您可以决定为六 (6) 个具有相应用户角色的不同用户创建种子,或者手动将其插入数据库。

因此,我们的用户角色将以如下数字表示:

  1. 超级管理员
  2. 行政
  3. 玩家
  4. 团队
  5. 学术的
  6. 侦察

正确播种虚拟用户数据后,如果您对此感到满意,让我们进入下一步。

创建仪表板控制器

下一步是为不同的用户创建不同的仪表板控制器。输入

php artisan make:controller AdminController

php artisan make:controller PlayerController

重复此操作,直到完成六 (6) 个仪表板。

创建中间件

创建好不同的控制器之后,接下来就是创建对应不同用户角色的不同中间件。TYPE

php artisan make:middleware Admin

php artisan make:middleware Player

重复此操作,直到完成六 (6) 个中间件。

创建中间件后,现在进入 kernel.php 文件的 $routeMiddleware 数组下并注册它们。

适当注册中间件后,下一步是将中间件分配给您想要保护的不同控制器或路由。

设置视图和路线

前往视图文件夹,创建一个不同的视图仪表板。记住,仪表板文件可以位于不同的文件夹中,这无关紧要,只需在控制器中正确路由它们即可。

在 Laravel 项目中查看文件夹
不同的用户仪表板

在每个仪表板内,我添加了一个虚拟文本,只是为了演示。

创建视图后,转到路由文件夹下的 web.php 并设置不同的路由以访问不同的仪表板。

现在,这是有趣的部分,在我的示例或项目中,我更喜欢将中间件分配给路由,而不是将其添加到控制器构造函数中。

编辑中间件

注册并将中间件分配给路由或控制器后,让我们编辑每个中间件的内容。因此,在 handle 方法中,检查用户是否已通过身份验证,并根据用户角色重定向到不同的仪表板。

编辑登录和注册控制器

成功登录后,您需要根据用户角色将用户重定向到适当的仪表板。

您可以对注册控制器执行相同操作,也可以简单地将用户重定向到验证页面,验证后,您可以根据您的项目再次重定向到仪表板或登录页面。

结论

哇哦!恭喜!这篇文章读了很久,代码也写得挺长的,你可以在这里观看视频。

到目前为止,我们解决的问题是阻止登录用户访问其他用户的仪表板,同时也防止与警卫错误合作时出现“过多的重定向错误”。

我们知道杀死老鼠的方法有很多种,我们想听听您关于如何解决同一问题的想法和最佳做法,如果您以前遇到过这个问题,您是如何解决的,请在下面的评论部分中听到,我们将相应地更新此帖子。

您可以在此处获取完整的源代码

如果您喜欢这篇文章,请务必与您的朋友分享并订阅我的成长频道

如果您对后端开发感兴趣(或者您是互联网爱好者)(移动 | 网络 | 桌面)请订阅我的[_Youtube 频道]( http://bit.ly/multimegaschool ),我们将发布一系列帮助完整的教程和指南,例如针对工匠的教程和指南_

Laravel 中的基于多重角色的身份验证一文首先出现在Masteringbackend上。

文章来源:https://dev.to/kaperskyguru/multiple-role-based-authentication-in-laravel-30pc
PREV
如何在编码时休息
NEXT
如何在 Windows 版 XAMPP 中更改 PHP 版本