Laravel 中的多角色身份验证
嘿,伙计们,在本文中,我将向您展示如何在 Laravel 中实现基于多个角色的身份验证,即使您分别有许多不同的用户和多个仪表板。
在我们深入研究如何实现这一目标之前,让我先分析一下我在一家公司工作时遇到的场景或问题,这让我花了将近两周的时间才弄清楚。
在这个项目中,我遇到了六 (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) 个具有相应用户角色的不同用户创建种子,或者手动将其插入数据库。
因此,我们的用户角色将以如下数字表示:
- 超级管理员
- 行政
- 玩家
- 团队
- 学术的
- 侦察
正确播种虚拟用户数据后,如果您对此感到满意,让我们进入下一步。
创建仪表板控制器
下一步是为不同的用户创建不同的仪表板控制器。输入
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 数组下并注册它们。
适当注册中间件后,下一步是将中间件分配给您想要保护的不同控制器或路由。
设置视图和路线
前往视图文件夹,创建一个不同的视图仪表板。记住,仪表板文件可以位于不同的文件夹中,这无关紧要,只需在控制器中正确路由它们即可。

在每个仪表板内,我添加了一个虚拟文本,只是为了演示。
创建视图后,转到路由文件夹下的 web.php 并设置不同的路由以访问不同的仪表板。
现在,这是有趣的部分,在我的示例或项目中,我更喜欢将中间件分配给路由,而不是将其添加到控制器构造函数中。
编辑中间件
注册并将中间件分配给路由或控制器后,让我们编辑每个中间件的内容。因此,在 handle 方法中,检查用户是否已通过身份验证,并根据用户角色重定向到不同的仪表板。
编辑登录和注册控制器
成功登录后,您需要根据用户角色将用户重定向到适当的仪表板。
您可以对注册控制器执行相同操作,也可以简单地将用户重定向到验证页面,验证后,您可以根据您的项目再次重定向到仪表板或登录页面。
结论
哇哦!恭喜!这篇文章读了很久,代码也写得挺长的,你可以在这里观看视频。
到目前为止,我们解决的问题是阻止登录用户访问其他用户的仪表板,同时也防止与警卫错误合作时出现“过多的重定向错误”。
我们知道杀死老鼠的方法有很多种,我们想听听您关于如何解决同一问题的想法和最佳做法,如果您以前遇到过这个问题,您是如何解决的,请在下面的评论部分中听到,我们将相应地更新此帖子。
您可以在此处获取完整的源代码
如果您喜欢这篇文章,请务必与您的朋友分享并订阅我的成长频道。
如果您对后端开发感兴趣(或者您是互联网爱好者)(移动 | 网络 | 桌面)请订阅我的[_Youtube 频道]( http://bit.ly/multimegaschool ),我们将发布一系列帮助完整的教程和指南,例如针对工匠的教程和指南_
Laravel 中的基于多重角色的身份验证一文首先出现在Masteringbackend上。
文章来源:https://dev.to/kaperskyguru/multiple-role-based-authentication-in-laravel-30pc