
本文旨在指导开发者在使用 Laravel 8 和 Breeze 搭建的系统中,如何在用户登录时检查其 active 字段(布尔类型)的值,仅允许 active 值为 1 的用户登录。我们将修改 LoginRequest.php 文件中的 authenticate() 方法,加入对用户激活状态的验证,确保只有激活的用户才能成功登录系统。
在使用 Laravel Breeze 搭建的系统中,默认的登录逻辑位于 app/Http/Requests/Auth/LoginRequest.php 文件中。我们需要修改该文件中的 authenticate() 方法,添加对用户 active 字段的验证。
以下是修改后的 authenticate() 方法代码:
/** * Attempt to authenticate the request's credentials. * * @return void * * @throws IlluminateValidationValidationException */public function authenticate(){ $this->ensureIsNotRateLimited(); if (! Auth::attempt(array_merge( $this->only('email', 'password'), ['active' => 1 ]), $this->filled('remember'))) { RateLimiter::hit($this->throttleKey()); throw ValidationException::withMessages([ 'email' => __('auth.failed'), ]); } RateLimiter::clear($this->throttleKey());}
代码解释:
$this->ensureIsNotRateLimited();: 确保用户没有超出速率限制。Auth::attempt(array_merge( $this->only(’email’, ‘password’), [‘active’ => 1 ]), $this->filled(‘remember’)): 这是验证用户身份的关键部分。Auth::attempt() 方法尝试使用提供的凭据(email 和 password)进行身份验证。我们使用 array_merge() 函数将额外的条件 [‘active’ => 1] 合并到凭据数组中。这意味着只有当用户的 email 和 password 匹配,并且 active 字段的值为 1 时,身份验证才会成功。$this->filled(‘remember’) 用于处理 “记住我” 功能。RateLimiter::hit($this->throttleKey());: 如果身份验证失败,则增加速率限制器的计数器。throw ValidationException::withMessages([’email’ => __(‘auth.failed’),]);: 如果身份验证失败,则抛出一个验证异常,并显示 “auth.failed” 错误消息。RateLimiter::clear($this->throttleKey());: 如果身份验证成功,则清除速率限制器的计数器。
注意事项:
确保你的 users 表中存在一个名为 active 的布尔类型的字段。如果你的 active 字段的名称不同,请相应地修改代码。例如,如果你的字段名为 is_active,则将 [‘active’ => 1] 更改为 [‘is_active’ => 1]。在生产环境中,建议使用更友好的错误消息,而不是简单的 “auth.failed”。你可以自定义错误消息,例如 “您的帐户尚未激活,请联系管理员。”
总结:
通过修改 LoginRequest.php 文件中的 authenticate() 方法,我们可以轻松地在 Laravel 8 Breeze 系统中实现登录时检查用户激活状态的功能。这可以有效地防止未激活的用户访问系统,提高系统的安全性。请记住根据您的具体需求调整代码,并始终在生产环境中提供清晰的错误消息。
以上就是Laravel 8 Breeze 登录时检查用户是否激活的详细内容,更多请关注php中文网其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1322745.html
微信扫一扫
支付宝扫一扫