Laravel - Auth验证流程

两种认证方式

我们先来看 config/auth.php

  • provider

     1. providers 数组让我们可以配置一个提供者,每个提供者可以选择不同的 driver.
     2. driver可以选择eloquent 或者 database ,
     3. 对应的驱动之后选择对应的配置项,eloquent:model,database:table
    
  • guard

     1. 在拥有provider之后我们可以配置guards 守卫,守卫可以配置一个驱动者和一个提供者
     2. 提供者就是我们上面配置的provider
     3. 而驱动者则有session(session认正),token(token认正)可供选择
     4. 默认api使用的是token认正,而web用户使用session认正
    

session认正

  • 在认证时我们可以使用
    Auth::attempt([‘email’ => $email, ‘password’ => $password])方法,
    此方法在验证成功后会自动为这个用户设置一个认证 Session,标识该用户登录成功
  • 后面就可以使用Auth::guard()->check()方式验证用户是否已经登录

token认正

  • 此认正方式laravel虽然提供了驱动方法,但是并没有默认它为验证方式,也没有提供自动生成token的方法,要使用此方法要自定义login方法
  • 通过查看底层的\vendor\laravel\framework\src\Illuminate\Auth\TokenGuard.php方法,
    我们可以发现laravel5.5底层默认的是token字段,我们也可以在此自定义此字段,
    在此我使用了web_token作为认正字段

在这里插入图片描述

  • 然后我们还要在数据库里建立相应的字段web_token

在这里插入图片描述

  • 建立完字段以后就可以写登录方法了
    在这里插入图片描述

  • 在这里还是使用了redis去保存token,便于设置token的过期时间

      1.至于为什么还要保存在数据库里,在注销或者token过期的时候还要更新数据库的token,是因为Auth底层获取user的方法是从数据库进行获取的
      2.贴上源码来看一波
    
  • 首先还是\vendor\laravel\framework\src\Illuminate\Auth\TokenGuard.php文件

      1.这里插一下,如果是想把token放在header头里传值,还要在TokenGuard.php加入这一段
    

    在这里插入图片描述

  • 如果不加入这一段只能从body里面获取token,头里传的token获取不到,如果是我理解有误,希望指出

  • 回到原来,我们要说Auth::user()方法, 这个方法会先实例化一个guard守卫指定的驱动,不指定的话就是默认的

  • 可以参考这段代码\vendor\laravel\framework\src\Illuminate\Auth\AuthManager.php
    在这里插入图片描述

  • 指定的话,就会去实例化指定的guard,比如Auth::guard(‘user’)->user()

  • 我们这里默认的就是守卫adminToken的驱动就是token
    在这里插入图片描述
    在这里插入图片描述

  • 当我们调用Auth::user( ) 时会调用\vendor\laravel\framework\src\Illuminate\Auth\TokenGuard.php里的
    在这里插入图片描述

  • 然后我们找到retrieveByCredentials()这个方法在vendor\laravel\framework\src\Illuminate\Auth\EloquentUserProvider.php
    在这里插入图片描述

  • 可以看出这个方法用token为条件在elquentModel里查出了一条userObject并返回给了我们

  • 所以我们Auth::user() 得到的user对象是在model里用token查出来的,所以如果想使用此功能的话,数据库里的token字段一定要保持更新

  • 当然你也可以抛弃不用,或者改变源码让他从redis中取到token和对应的id,再用id去model中取数据

  • 这里理解了之后我们在写一个middleware用来验证在访问网站时token是否正确就行了
    在这里插入图片描述

  • 把新建的middleware加入kernel.php中
    在这里插入图片描述

  • 最后在要被验证的方法里的构造方法里调用这个middleware就可以开启我们得token验证了

  • 如果你有某个方法不想使用验证, 可以使用except()方法把其排除了

这里看了别人的文章搬来的 主要是留着以后需要用到来看的 侵权联系我删除
原文地址 https://segmentfault.com/a/1190000018245349

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Laravel-Admin 是一个开源的后台管理框架,它基于 Laravel 框架,提供了一套 CRUD 操作的界面。Laravel-Admin 越权漏洞是指攻击者可以通过构造特定的 URL,绕过权限验证,访问未授权的页面或进行未授权的操作。 修复 Laravel-Admin 越权漏洞,可以按照以下步骤进行: 1. 升级 Laravel-Admin 到最新版本。开发组在最新版中已经修复了该漏洞。 2. 如果无法升级到最新版本,可以手动修复漏洞。具体步骤如下: - 打开项目中的 `app/Admin/routes.php` 文件,找到需要修复的路由。 - 在需要进行权限验证的路由前,加上如下代码: ```php // 需要进行权限验证的路由 $router->resource('users', 'UserController')->middleware('auth.admin'); ``` 上述代码中的 `middleware('auth.admin')` 表示该路由需要通过 `auth.admin` 中间件进行验证- 创建 `app/Http/Middleware/AuthenticateAdmin.php` 中间件。 ```php <?php namespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\Auth; class AuthenticateAdmin { public function handle($request, Closure $next) { if (Auth::guard('admin')->check()) { return $next($request); } return redirect('/admin/auth/login'); } } ``` 上述代码中的 `Auth::guard('admin')->check()` 表示使用 `admin` guard 进行验证- 在 `app/Http/Kernel.php` 文件中注册中间件。 ```php protected $routeMiddleware = [ // ... 'auth.admin' => \App\Http\Middleware\AuthenticateAdmin::class, ]; ``` 上述代码中的 `auth.admin` 表示中间件的名字,`\App\Http\Middleware\AuthenticateAdmin::class` 表示中间件的类名。 通过以上步骤,就可以修复 Laravel-Admin 越权漏洞了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值