不同认证方式

我们先来看 config/auth.php

  • provider

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

    • 在拥有provider之后我们可以配置guards 守卫,守卫可以配置一个驱动者和一个提供者
    • 提供者就是我们上面配置的provider
    • 而驱动者则有session(session认正),token(token认正)可供选择
    • 默认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等nosql保存web_token的话也是需要web_token的,为了使laravel自带的Auth门面可以使用
  • 建立完字段以后就可以写登录方法了:

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

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

    • 这里插一下,如果是想把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()方法把其排除了

Laravel - Auth验证流程以及guard守卫和自定义驱动driver驱动,使用web-token验证相关推荐

  1. antd vue表单验证_ant design vue框架中自定义表单或单个表单框验证

    一.项目要求 1.要求:点击新增按钮弹出新增页面,在输入名称时进行验证,当输入名称和列表下的名称相同,即后台数据库中存在,此时将会提醒用户,该名称已存在, 2.要求:该名称不存在,则新增成功 二.思路 ...

  2. 【记】微信支付服务器证书更换通知的验证流程

    [记]微信支付服务器证书更换通知的验证流程 原文:[记]微信支付服务器证书更换通知的验证流程 [重要]微信支付服务器证书更换通知,请开发人员验证以免影响交易 尊敬的微信支付商户&服务商: 因微 ...

  3. 基于 Token 的身份验证:JSON Web Token

    最近了解下基于 Token 的身份验证,跟大伙分享下.很多大型网站也都在用,比如 Facebook,Twitter,Google+,Github 等等, 比起传统的身份验证方法,Token 扩展性更强 ...

  4. 微信token验证失败的解决方法

    微信token验证失败的解决方法 参考文章: (1)微信token验证失败的解决方法 (2)https://www.cnblogs.com/kenshinobiy/p/5433705.html 备忘一 ...

  5. springmvc开发微信公众号接口 微信公众号测试账号配置接口Token验证

    转:springmvc开发微信公众号接口 微信公众号测试账号配置接口Token验证 开发前必读以及准备工作: 1.微信公众平台开发是指为微信公众号进行业务开发,为移动应用.PC端网站.公众号第三方平台 ...

  6. php获取token失败,如何解决php token验证失败的问题

    如何解决php token验证失败的问题 发布时间:2020-07-11 09:07:33 来源:亿速云 阅读:80 作者:Leah 这篇文章将为大家详细讲解有关如何解决php token验证失败的问 ...

  7. php获取token失败,php token验证失败怎么办?

    php token验证失败的解决办法:1.保障添加的服务器是联通,并且url是能够访问:2.token不能重复:3.服务器上的token要改时,要和配置表单上的一致. php token验证失败的解决 ...

  8. laravel auth.php,Laravel 自带的Auth验证登录方法

    在laravel有自带的登录验证.只要建立对应的表和配置一些文件就能够使用,无需开发者自己去实现登录逻辑. 第一步:配置方面 在config下的auth.php配置guards 和 providers ...

  9. 详解如何修改Laravel Auth使用salt和password来认证用户

    前言 Laraval自带的用户认证系统Auth非常强大易用,不过在Laravel的用户认证系统中用户注册.登录.找回密码这些模块中用到密码加密和认证算法时使用的都是bcrypt,而很多之前做的项目用户 ...

最新文章

  1. MVC 之 架构的基本原理及Asp.Net实现MVC
  2. 如何使用Ajax技术开发Web应用程序(2)
  3. django html5 关系,Django REST FrameWork中文教程5:关系和超链接API
  4. 龙芯2k按键中断驱动_外部中断按键驱动
  5. vant显示日期格式_Vue+Vant ui实现日期时间选择
  6. MSP430F5529 DriverLib 库函数学习笔记(一)时钟配置和闪烁LED
  7. jmeter压力性能测试-多台机器并发请求
  8. linux基础命令总结-1
  9. php base64原理
  10. Windows便签快捷键
  11. java文件上传,返回访问url
  12. IDEA必备插件大全
  13. POWERSHELL脚本编写利器:PowerGUI Visual Studio Extension
  14. 计算机 bat文件夹加密,无需第三方软件,自制批处理加密隐藏文件夹
  15. java培训课程有哪些
  16. 联发科MT6797/Helio X20软件用户手册资料介绍
  17. linux下大文件分割
  18. 华为(huawei)园区网的常规部署配置示例
  19. Go学习笔记 -- 异常处理
  20. 笔记本电脑右下角的电池图标不显示如何找出

热门文章

  1. 苹果8怎么投屏到电视_创维电视怎么投屏
  2. mq多个消费者消费一个消息_消息中间件——RabbitMQ(五)快速入门生产者与消费者...
  3. neo4j设置节点或者边的显示,包括颜色、属性、大小
  4. vim 有用命令-20190217
  5. 动漫风html源码,CSS3动画制作一个卡通风格的404错误页面代码
  6. java 文件 缓存_JAVA缓存技术
  7. 最短Hamilton路径与旅行商问题联系与解决
  8. 【设计模式】基本概念
  9. 软件项目管理0706:工匠精神
  10. window.location跳转页面