使用Laravel怎么实现一个多用户认证系统

  介绍

本篇文章为大家展示了使用Laravel怎么实现一个多用户认证系统,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

<强> # 1自动生成代码

Laravel自带的身份验证可以通过一行命令来生成相关的认证控制器,模版以及路由:

php  artisan : Auth

这样就会生成一个AuthController认证控制器和HomeController通用控制器,这个控制器没什么用,就是登录成功后跳转的;还有就是一些登录注册需要的模版文件,在资源/视图里面看看就知道了,而且还会在路由文件中生成相关认证路,由源代码在<代码> \照亮\ \路由器路由::身份验证();>

public  function 身份验证(),{,   ,//Authentication 路线……,   美元,这个→得到(& # 39;登录# 39;,,& # 39;Auth \ AuthController@showLoginForm& # 39;),,   ,$ this→post(& # 39;登录# 39;,,& # 39;Auth \ AuthController@login& # 39;),,   美元,这个→得到(& # 39;注销# 39;,,& # 39;Auth \ AuthController@logout& # 39;),,   ,//Registration 路线……,   美元,这个→得到(& # 39;注册# 39;,,& # 39;Auth \ AuthController@showRegistrationForm& # 39;),,   ,$ this→post(& # 39;注册# 39;,,& # 39;Auth \ AuthController@register& # 39;),,   ,//Password  Reset 路线……,   美元,这个→得到(& # 39;密码/重置/{牌?}& # 39;,,& # 39;Auth \ PasswordController@showResetForm& # 39;),,   ,$ this→post(& # 39;密码/电子邮件# 39;,,& # 39;Auth \ PasswordController@sendResetLinkEmail& # 39;),,   ,$ this→post(& # 39;/重置密码# 39;,,& # 39;Auth \ PasswordController@reset& # 39;),,   }

<强> # 2,身份验证。php文件配置

这个是和认证相关的配置文件,估计很多人看不懂里面一些概念,比如说guard以及provider
这些,文档也基本上是没写。那么guard到底是什么东西呢?这个可以理解为就是一个角色,在guards
数组中的每一项都是一个角色,默认的有web和api两种,这就表示了当前有这两种角色会使用到认证系统。当然,这两种肯定是不会满足我们要求的,所以我们一般都会自定义一些guard。自定义也很简单,就是在guards数组增加一项,其中driver就是表示这个认证要怎么去保存用户状态,一般是保存在session中,而provider就是下面provider数组的一项,那么provider又是什么鬼呢?这个更好理解了,你要实现用户认证肯定要保存用户名密码对吧,那么provider就是告诉Laravel你的用户信息保存在哪一张表里面,driver就是告诉了要使用那种方式来操作数据库。

#3 认证

其实Laravel自动生成的代码已经可以满足登录注册的需求了,但是每一个guard都需要一个AuthController来,那么如何公用一个认证控制器呢?这里就是用到guard这个东西了,因为可以表示用户身份来进行不同的逻辑。但是,在认证控制器中无法获取到这guard,所以我们可以通过路由参数的方式来实现。定义一个路由群组:

Route::group(['prefix'=>'{guard}'],function(){ Route::auth();});

在这个路由群组中我们设置前缀为guard参数,这样就可以在AuthController中获取到当前的guard了。一般情况下我们获取路由参数都是通过依赖注入Request实例来获取,但是这里也有一个坑那就是我在5.1版本之前路由参数都可以通过

$request->input('key')

这样来获取,但是在5.2中已经不行了,必须通过

$request->key

来获取,或者就是直接从路由实例中获取,不知道这是什么原因。在AuthController控制器中使用了一些trait,这些trait就是实现了认证注册的逻辑,可以通过重写一些控制器的属性来自定义逻辑。包括$redirectTo还有$guard以及$username等等,这些一看就知道第一个是登录成功后跳转,第二个就是定义当前使用的guard,第三个就是认证使用的用户名字段。所以我们可以在认证控制器中通过获取到的guard来自定义。

#4 路由保护

一般做认证系统的,都是要来保护路由的,那么如何保护路由呢?文档里面说给需要保护的路由添加一个auth中间件,那么事实是怎样的呢?事实也确实是这样,不过文档没有说的一点是,通过auth中间件保护的路由必须还要加上web中间件、必须还要加上web中间件、必须还要加上web中间件,重要的事情要说三遍啊,不然会出现什么问题呢?不管你认证成功失败都是会跳转到/这条路由,这个大坑要注意!当然你也可以在中间件中指定guard来让Laravel知道通过那个来认证,如果没指定的话就是使用配置文件里面默认的:

使用Laravel怎么实现一个多用户认证系统