laravel中guard是什么

laravel中,guard是一个用于用户认证的插件;guard的作用就是处理认证判断每一个请求,从数据库中读取数据和用户输入的对比,调用是否登录过或者允许通过的,并且Guard能非常灵活的构建一套自己的认证体系。

laravel中guard是什么

本文操作环境:Windows10系统、Laravel5.4版、Dell G3电脑。

laravel中guard

其实无论是Guard还是Provide,你都可以理解为。某个特定功能的插件。

他的作用是处理一个认证,来判断每个请求、调用是否是登录过,或者允许通过的,

什么是Guard

在Laravel/Lumen框架中,用户的登录/注册的认证基本都已经封装好了,开箱即用。而登录/注册认证的核心就是:

用户的注册信息存入数据库(登记)

从数据库中读取数据和用户输入的对比(认证)

上述两步是登录/注册的基本,可以看到都会涉及到数据库的操作,这两步框架底层已经帮我们做好了,而且考虑到了很多情况,比如用户认证的数据表不是user表而是admin_user,认证字段是phone而不是email,等等一些问题都是Guard所要解决的,通过Guard可以指定使用哪个数据表什么字段等,Guard能非常灵活的构建一套自己的认证体系。

通俗地讲,就是这样:Guard就像是小区的门卫大叔,冷酷无情,不认人只认登记信息。

进小区之前大叔需要先检查你的身份,验证不通过大叔就不让你进去。

如果是走路/骑车进去,大叔1需要检查你的门禁卡,他拿出记录了小区所有业主门禁卡信息的本子查看你这个门禁卡信息有没有在这个本子上;

如果你开车进去,大叔2就从记录了所有业主车牌号的本子中检查你的车牌号,所以新业主要小区了需要告知门卫大叔们你的门禁卡信息或者车牌号,要不然大叔2不让你进。

如果是物业管理员要进小区,门卫大叔3也只认登记信息,管理员出示他的管理员门禁卡,门卫大叔就会检查记录了管理员门禁卡信息的本子。

上面讲的对应了框架中的多用户认证:

走路/骑车的人 -> 门禁卡

开车的人 -> 车牌号

物业管理员 -> 门禁卡

门禁卡和车牌号都是不同的认证方式,而门卫大叔查看的本子就对应了不同数据库中的用户信息,这样讲是不是更容易理解了。

Lumen/Laravel中以中间件(Middleware)的方式提供了非常灵活的认证,通过简单的配置就可以切换多个认证。

工作流程图如下:

14.png

从图中可以看到,一个Guard会涉及到三个部分,分别是:

慧中标AI标书 慧中标AI标书

慧中标AI标书是一款AI智能辅助写标书工具。

慧中标AI标书 120 查看详情 慧中标AI标书

Guard实现本身

User Provider用户提供者,指定哪个数据表以什么方式获取(eloquent/database)

Authenticatable接口规定那些东西可以被认证,就是实现它的接口嘛

扩展知识:

Guard我的理解他应该是一个类似用户认证的东西。

在 config/auth.php 中有配置 guards 的参数,可以看出来 web 和 api 是两个 guards。

在平时的业务中api可能更多的是用户前台用户的操作,而web更多的是后台用户的操作。

默认配置都是指向 users 的 provider。

/*    | Authentication Guards    |认证关卡    | Next, you may define every authentication guard for your application. Of course, a great default configuration has been defined for you here which uses session storage and the Eloquent user provider.    |接下来,你可能要为你的应用定义每个认证关卡。当然,已经为你定一了一个很不错的默认配置。这里会使用会话储存和用户模型    | All authentication drivers have a user provider. This defines how the users are actually retrieved out of your database or other storage mechanisms used by this application to persist your user's data.    |所有的认证驱动都有一个用户提供者。这里定义了怎么实际上怎么从你的数据库或者其他储存机制中取出用户。以便应用开保持你的用户数据    | Supported: "session", "token"    |可选驱动:"session", "token"    */'guards' => [        'web' => [            'driver' => 'session',            'provider' => 'users',        ],        'api' => [            'driver' => 'token',            'provider' => 'users',        ],    ],

接下来看看 provider 都有什么配置。

  /*    | User Providers    |用户提供者    | If you have multiple user tables or models you may configure multiple sources which represent each model / table. These sources may then be assigned to any extra authentication guards you have defined.    | 如果你有多个用户表或用户模型,你可以配置多个代表用户表或模型的资源。这些资源可能被分配给应用中你定义的其他认证关卡    | Supported: "database", "eloquent"    |    */ 'providers' => [        'users' => [            'driver' => 'eloquent',            'model' => AppUser::class,        ],        // 'users' => [        //     'driver' => 'database',        //     'table' => 'users',        // ],    ],

在 providers 中有刚才看到的 users 配置了吧,这个就是配置laravel的用户组,因为前台和后台用户在一般的情况下是分开操作的。所以就可以在这里新建一个 admin 的用户组,并配置。开箱默认只用 users。

相对的每个用户组密码操作应该也是不同的,所以这里还有 password 的配置。

  /*    | Resetting Passwords    | 密码重置    | You may specify multiple password reset configurations if you have more than one user table or model in the application and you want to have separate password reset settings based on the specific user types.    | 如果你有多个用户模型或表,并且想对不同用户类型有特定的密码重置,则可以配置多个特定的重置密码    | The expire time is the number of minutes that the reset token should be considered valid. This security feature keeps tokens short-lived so they have less time to be guessed. You may change this as needed.    |这个获取时间是令牌过期的分钟数,这个安全措施可以保证令牌保持段时间有效,因此有更少的时间被破解。你可以按照需要更改。    */    'passwords' => [        'users' => [            'provider' => 'users',            'table' => 'password_resets',            'expire' => 60,        ],    ],

平时用于检测登陆用户,或者用户是否登陆我们都用的是 Auth::check() 就可以检测到,这是因为在使用默认配置的时候,guard自动配置为 users 用户组。

  /*    | Authentication Defaults    | 默认认证配置    | This option controls the default authentication "guard" and password reset options for your application. You may change these defaults as required, but they're a perfect start for most applications.    | 这个就是应用的默认认证关卡个重置密码,你可以按自己要求更改。但这是最适合一个新应用的配置    */    'defaults' => [        'guard' => 'web',        'passwords' => 'users',    ],

web guard下指向的就是 users 模型。

但是当如果我们有两个用户组,前台后台的时候怎么进行验证呢?

Auth::check() 是判断用户是否登录的方法,如果使用的默认用户系统,那这样使用没问题。

但是使用两组用户的话,就应该这样操作:

Auth::guard(‘api’)->check() 就是用来判断前台用户是否登录 Auth::guard(‘web’)->check() 就是用来判断后台用户是否登录

所以如果使用非默认用户组,则需要用guard来指定。

所以我们平时用的其实就是默认配置,写全就应该是 Auth::guard(‘web)->check()

【相关推荐:laravel视频教程】

以上就是laravel中guard是什么的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/624714.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
权威认证加持!凯迪仕联合德国莱茵TÜV  定义智能锁品质新高度
上一篇 2025年11月11日 08:16:31
计算机语言学哪个最好
下一篇 2025年11月11日 08:16:33

相关推荐

  • composer require-dev和require有什么不同_Composer Require与Require-Dev区别解析

    require用于声明项目运行必需的依赖,如框架、数据库组件和第三方SDK,这些包会随项目部署到生产环境;2. require-dev用于声明仅在开发和测试阶段需要的工具,如PHPUnit、PHPStan、Faker等,不会默认部署到生产环境;3. 安装时composer install根据环境决定…

    2026年5月10日
    1000
  • 开源免费PHP工具 PHP开发效率提升利器

    推荐开源免费PHP开发工具以提升效率:VS Code、Sublime Text轻量高效,PhpStorm专业强大;调试用Xdebug、Kint、Ray;依赖管理选Composer;代码质量工具包括PHPStan、Psalm、PHP_CodeSniffer;数据库管理可用%ignore_a_1%MyA…

    2026年5月10日
    000
  • 深入理解 Laravel Session::put:避免常见陷阱与实现表单限流

    本文旨在深入探讨 laravel 框架中 `session::put` 方法的正确用法及其常见误区。针对用户在实现表单提交限流时遇到的问题,详细阐述了 `session::put` 必须提供键值对的原理,并提供了如何在控制器中利用会话机制有效防止重复提交的实战代码示例。通过本文,读者将掌握 lara…

    2026年5月10日
    000
  • Voyager 中关联关系的翻译问题解决方案

    本文档旨在解决在使用 TCGVoyager 管理后台时,关联模型无法正确翻译的问题。主要针对 Laravel 项目中,使用 Voyager 1.4 版本以及 Laravel 8.0 版本,并且已经配置多语言支持的情况下,如何确保关联关系中的可翻译字段能够根据当前应用语言环境进行正确翻译。通过修改 B…

    2026年5月10日
    000
  • 优化 Laravel Eloquent 查询:高效构建用户排行榜数据

    本教程详细讲解如何优化 Laravel Eloquent 查询以高效生成基于关联记录计数的排行榜。通过识别并消除冗余的 whereHas 子句,并巧妙利用 withCount 的条件闭包,我们能显著提升查询性能,大幅缩短数据获取时间,从而改善用户体验并降低数据库负载。 在 laravel 应用开发中…

    2026年5月10日
    000
  • 告别重复:使用Laravel Precognition统一前后端API验证

    本文旨在解决在Laravel后端与前端API交互中,如何高效复用后端验证规则的挑战。传统方案常限于表单元素,难以覆盖所有API请求。通过引入Laravel Precognition,开发者能够实现后端验证逻辑在前端的无缝应用,避免规则重复编写,从而提升开发效率与代码一致性,确保所有API请求的数据完…

    2026年5月10日
    200
  • Laravel Session::put 正确用法详解与常见误区规避

    本文详细探讨了 laravel 中 `session::put` 方法的正确用法,特别指出在仅提供键名而未指定值时可能导致会话数据未被正确设置的问题。通过示例代码,阐述了如何为会话数据赋予明确的值,并演示了如何正确地检查和获取会话数据,以确保会话管理功能按预期工作,有效避免常见的会话操作错误。 La…

    2026年5月10日
    000
  • PHP中批量为嵌套数组元素添加公共属性的教程

    本教程将详细介绍在php中如何高效地为包含多个关联数组的集合中的每个子数组添加一个或多个新的公共键值对。我们将探讨使用循环和数组合并函数实现这一目标的方法,并提供清晰的代码示例,帮助开发者处理此类数据结构转换。 在PHP开发中,我们经常会遇到处理复杂数据结构的需求,其中一种常见场景是拥有一个由多个关…

    2026年5月10日
    000
  • PHP框架的社区支持存在哪些痛点?

    php框架社区支持的痛点包括:文档匮乏或过时(1)、响应缓慢(2)、社区分散(3)。实战案例表明这些痛点可能导致开发进度受阻。改善方法包括:提供全面的文档、建立响应迅速的官方论坛、创建一个集成的社区平台。 PHP 框架社区支持存在的痛点及实战案例 PHP 框架为 Web 开发提供了强大的基础,但其社…

    2026年5月10日
    100
  • Laravel 8中Firebase Storage文件条件删除策略与实践

    本文针对Laravel 8环境下Firebase Storage无法直接按目录批量或条件删除文件的限制,提出了一套基于元数据管理的解决方案。通过在数据库中记录文件信息,结合Laravel的Artisan命令和Cron任务,实现对过期文件的精准识别与逐个删除,确保存储资源的有效管理。 Firebase…

    2026年5月10日
    000
  • php怎么安装_在云服务器上部署PHP环境的步骤

    答案:在云服务器上部署PHP环境需搭建LEMP栈(Linux+Nginx+MySQL+PHP-FPM),依次更新系统、安装Nginx、MariaDB、PHP-FPM及扩展,配置Nginx解析PHP并测试,最后通过权限控制、安全配置、防火墙和HTTPS等措施保障环境安全稳定。 在云服务器上部署PHP环…

    2026年5月10日
    000
  • Laravel 产品多图上传错误:foreach() 参数类型问题解决方案

    本文旨在解决 Laravel 应用中产品多图上传时遇到的 “foreach() argument must be of type array|object, null given” 错误。通过检查并确保循环遍历的变量为数组类型,避免因空值导致的错误,并提供代码示例和注意事项,…

    2026年5月10日
    200
  • PHP源码命令行工具开发_PHP源码命令行工具开发教程

    答案是使用PHP开发命令行工具需依托CLI SAPI,结合Composer管理依赖,并推荐采用Symfony Console等组件库来构建。首先确保PHP支持CLI模式,通过编写基础脚本并利用$argv和getopt()处理参数,但更优方式是引入Symfony Console组件进行命令定义与输入输…

    2026年5月10日
    000
  • PHP怎么运行创建_php脚本创建与执行流程解析

    PHP脚本需在服务器环境中通过解释器运行,不能双击执行。首先搭建环境(如XAMPP),然后编写.php文件并保存至服务器根目录,接着通过浏览器访问或命令行执行php命令运行脚本,服务器会调用PHP解释器解析代码并返回结果。 PHP脚本的运行依赖于服务器环境和解释器,不是直接像可执行程序那样双击运行。…

    2026年5月10日
    100
  • php中get_parent_class获取父类名_php在继承链中定位父类的应用场景

    get_parent_class函数用于获取类的父类名称,接收类名字符串返回父类名或false。示例中Dog类继承Animal,调用get_parent_class(__CLASS__)输出Animal。应用场景一:条件性调用父类方法,如构造函数中判断是否存在父类并调用其方法,提升灵活性。应用场景二…

    2026年5月10日
    100
  • 使用Laravel Blade动态渲染带标题的表格数据

    本文旨在详细指导如何在Laravel Blade模板中,利用`@foreach`循环和正确的索引策略,高效且准确地从嵌套数组结构中提取数据,并将其渲染成一个结构清晰、内容匹配的HTML表格,避免数据重复和错位问题。 在Web开发中,经常需要根据后端提供的数据动态生成HTML表格。特别是在处理具有行标…

    2026年5月10日
    000
  • Laravel模型中实现多语言数据自动过滤:重写newQuery()方法

    本教程详细介绍在laravel多语言应用中,如何通过重写模型(model)的`newquery()`方法,实现数据查询时自动根据当前应用语言环境进行过滤。这种方法提供了一种优雅且dry(don’t repeat yourself)的解决方案,避免了在每次数据查询时手动添加语言条件,确保了…

    2026年5月10日
    000
  • php学习有哪些

    PHP 学习途径:入门途径:在线教程:Codecademy、Udemy、Coursera 等书籍:《Head First PHP & MySQL》、《PHP in Action》官方文档:PHP 官方文档进阶学习:框架:Laravel、CodeIgniter 等数据库:MySQL、Postg…

    2026年5月10日
    100
  • 在 Laravel 中同时存储原始图片和 WebP 转换图片

    本文详细介绍了在 Laravel 应用中如何高效地处理图片上传,实现同时保存原始图片(如 JPG/PNG)及其 WebP 转换版本。通过利用 PHP 原生 GD 库功能,我们能够克服 Intervention Image 在特定场景下的路径写入问题,确保原始图片和优化后的 WebP 格式文件都能正确…

    2026年5月10日
    000
  • 解决AJAX响应中PHP输出JSON后出现多余HTML的问题

    本文旨在解决PHP脚本通过AJAX响应返回JSON数据时,出现JSON数据后方意外附带HTML内容的问题。通过在PHP脚本中JSON编码输出后立即使用die()或exit()函数,可以有效阻止后续不必要的输出,确保客户端接收到纯净、可解析的JSON响应,从而避免解析错误,提升前后端通信的健壮性。 理…

    2026年5月10日
    000

发表回复

登录后才能评论
关注微信