• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Laravel5 快速认证逻辑流程的分析

php 搞代码 4年前 (2022-01-22) 24次浏览 已收录 0个评论

这篇文章主要介绍了关于Laravel5 快速认证逻辑流程的分析,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

Laravel5本身自带一套用户认证功能,只需在新项目下,使用命令行php artisan make:authphp artisan migrate就可以使用自带的快速认证功能。

以下为分析登录功能的逻辑分析,以Laravel 5.5版本为准。

通过命令php artisan route:list得到登录路由(红框):

打开查看/app/Http/Controller/Auth/LoginController.php,文件代码很简洁,其实登录逻辑和方法都集成在Illuminate/Foundation/Auth/AuthenticatesUsers的trait里了:

查看Illuminate\Foundation\Auth\AuthenticatesUsers代码的login方法,参数$request为请求对象,包含登录请求的信息包括登录名、密码等:

line31: validateLogin方法负责调用controller本身的validate本文来源gao@!dai!ma.com搞$$代^@码!网!搞gaodaima代码方法验证用户名和密码是否符合简单规则,这个就没必要深入讲了。

值得注意的是红框标注的username方法,开发者可以在LoginController自定义该方法覆盖trait此方法,自定义登录账号字段,trait默认为'email'。

勿直接更改trait的username()方法,保持Laravel5框架的完整性,道理就不详说了。

line36:hasTooManyLoginAttempts方法,用于检验账号尝试登录的次数是否达到设定的最大值。

此方法引用于Illuminate\Foundation\Auth\ThrottlesLogins的trait。看trait名称就猜得出它是负责避免暴力登录用的。

上图中的limiter()返回RateLimiter对象(顾名思义:频率限制器),该对象是app服务容器创建的。该对象源于:Illuminate\Cache\RateLimiter文件。

从该对象的位置可以看出,它使用了Laravel缓存机制处理登录次数。

所以上图hasTooManyLoginAttempts方法是调用了RateLimiter对象的tooManyAttempts方法验证登录次数:

tooManyAttempt方法有三个参数:

$key:用于cacche保存当前账号的登录次数值的相对应key。该key组成是这样的:

所以该key值大致是这样的:"email|101:10:45:12"。从这里可以看得出该暴力破解防范是利用了ip。当然了要是换IP我还是可以再去尝试登录的,虽然总有局限性,但总比裸着强多了。

$maxAttempts:最大尝试登录次数设定值。

该值是可以自定义的,可以写在LoginController自定义maxAttempts属性,默认为5次:

$decayMinutes:达到最大尝试次数后恢复登录的等待时长(分钟数)。

该值也是可自定义的,在LoginController自定义该属性,默认1分钟:

回到RateLimiter::tooManyAttempts方法,该方法会判断当前登录次数是否达到设定值,如果达到设定值并且还在距离上一次禁止登录时间范围内,则返回true,表示当前用户(IP)还在禁止登录状态。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Laravel5 快速认证逻辑流程的分析

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址