• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Laravel多用户认证系统示例详解

    前言

    自从Laravel5.2开始,自带的Auth认证系统可以支持多个角色认证了。就是说你比如果有管理员、普通用户这两种角色,都可以通过同一个Auth系统来实现认证。

    本文将详细给大家介绍关于Laravel多用户认证系统的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

    #1 自动生成代码

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

    php artisan make:auth

    这样就会生成一个AuthController认证控制器和HomeController通用控制器,这个控制器没什么用,就是登录成功后跳转的;还有就是一些登录注册需要的模版文件,在resource/view里面看看就知道了;而且还会在路由文件中生成相关认证路由,源代码在\Illuminate\Routing\Router::auth(); ,其实就是配置了一些登录注册用的:

    public function auth() { 
     // Authentication Routes... 
     $this->get('login', 'Auth\AuthController@showLoginForm'); 
     $this->post('login', 'Auth\AuthController@login'); 
     $this->get('logout', 'Auth\AuthController@logout'); 
     // Registration Routes... 
     $this->get('register', 'Auth\AuthController@showRegistrationForm'); 
     $this->post('register', 'Auth\AuthController@register'); 
     // Password Reset Routes... 
     $this->get('password/reset/{token?}', 'Auth\PasswordController@showResetForm'); 
     $this->post('password/email', 'Auth\PasswordController@sendResetLinkEmail'); 
     $this->post('password/reset', 'Auth\PasswordController@reset'); 
    }

    #2 auth.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知道通过那个来认证,如果没指定的话就是使用配置文件里面默认的:

    Route::get('profile', [ 'middleware' => 'auth:api', 'uses' => 'ProfileController@show']);

    #5 获取用户实例

    通过认证后就可以通过Auth门面来获取到当前通过认证的用户实例。

    $user = Auth::user();

    这里还有一个要注意的是,以上的方式默认获取的是配置文件中的guard的,假如你当前登录的guard不是配置文件中的,就必须要这样子来获取:

    $user = Auth::guard('guard')->user();

    #6 总结

    总得来说,Laravel5.2自带的Auth系统还是很好用的,只是有一些小坑文档没说清楚,用过几次之后就可以很熟悉了,可以给我们节约很多的开发时间。

    好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

    您可能感兴趣的文章:
    • Laravel实现用户注册和登录
    • Laravel 5框架学习之用户认证
    • Laravel重写用户登录简单示例
    • Laravel框架用户登陆身份验证实现方法详解
    • Laravel实现用户多字段认证的解决方法
    • Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
    • 解决laravel5中auth用户登录其他页面获取不到登录信息的问题
    • laravel-admin 管理平台获取当前登陆用户信息的例子
    • Laravel6.2中用于用户登录的新密码确认流程详解
    • Laravel 微信小程序后端实现用户登录的示例代码
    • Laravel用户授权系统的使用方法示例
    • laravel利用中间件防止未登录用户直接访问后台的方法
    • Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
    上一篇:PHP简单实现防止SQL注入的方法
    下一篇:PHP实现根据数组某个键值大小进行排序的方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Laravel多用户认证系统示例详解 Laravel,多用户,认证,系统,