如何使用 Laravel 5.5 身份验证使电子邮件登录不区分大小写

2024-01-08

在构建我的应用程序时,我通过运行使用了 Laravel 身份验证脚手架php artisan make:auth这很棒,节省了我很多时间。

但是,我遇到了用户无法登录的问题,因为他们不记得最初注册时使用的电子邮件大小写。

例如,注册的用户[email protected] /cdn-cgi/l/email-protection无法登录[email protected] /cdn-cgi/l/email-protection.

我从我的研究中了解到技术上@ 之前的部分区分大小写凭借规范 https://stackoverflow.com/a/9808332/2611917,并且理论上,上面的两封电子邮件可能属于两个不同的人。但在我的情况下,我并不认为我需要在登录时强制执行此操作。

我正在使用 Postgres 数据库,因此我希望将电子邮件数据库查找替换为Auth::attempt() with ilike代替like如果可能的话。然而,我一生都无法找到它在源代码中的位置,因此不知道如何覆盖它。

Tl;dr 如何覆盖 Laravel 的默认身份验证以不区分大小写的方式进行电子邮件查找?

Solution

我最终通过首先采纳 @btl 建议并在电子邮件属性上实现一个 mutator 方法来解决这个问题。我不想检查并更改现有用户的所有电子邮件,并且感觉如果我确实遇到了我想要恢复区分大小写的问题,我想要一个可以的解决方案很容易被撤消。

应用程序/用户.php

public function getEmailAttribute($value) {
    return strtolower($value);
}

应用程序/Http/Controllers/Auth/LoginController.php

protected function credentials()
{
    $username = $this->username();
    $credentials = request()->only($username, 'password');
    if (isset($credentials[$username])) {
        $credentials[$username] = strtolower($credentials[$username]);
    }
    return $credentials;
}

不幸的是我不知道如何将同样的逻辑应用到ForgotPasswordController.php但现在我会活下去。现在,无论电子邮件大小写如何,登录似乎都可以工作。


在您的用户模型上添加一个 mutator 方法,使电子邮件全部小写:

public function setEmailAttribute($value)
{
    $this->attributes['email'] = strtolower($value);
}

每当用户注册时,电子邮件将始终转换为小写。

或者,在用户模型上使用访问器:

public function getEmailAttribute($value)
{
    return strtolower($value);
}

这样,原始值会保留在数据库中,但每当您调用 $user->email 时,它都会是小写的。在进行严格比较时,您只需将登录时的用户输入转换为小写即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Laravel 5.5 身份验证使电子邮件登录不区分大小写 的相关文章

随机推荐

  • 是否可以在代码库中嵌入 Cockburn 风格的文本 UML 用例内容以提高代码可读性?

    在代码中试验 Cockburn 用例 我正在编写一些复杂的 UI 代码 我决定使用涉及鱼类 风筝和海平面的 Cockburn 用例 Martin Fowler 在他的 UML Distilled 一书中进行了讨论 我将 Cockburn 用
  • 我如何模拟查询字符串

    在最小起订量中使用以下内容 public Mock
  • 如何在 html/css/js 中创建折叠树形表格?

    我有一些要显示的数据 这些数据既是表格形式的又是分层的 我想让用户能够展开和折叠节点 除了功能性之外 有点像这样 http www maxdesign com au articles tree table http www maxdesig
  • AngularJS 过滤多个选择输入

    我真的很惊讶没有任何地方有任何关于 AngularJS 更高级过滤机制的文档或问题 它对于任何 UI 都是必不可少的 我需要过滤掉包含当前项目的选择选项 问题是当我们迭代时如何拼接每个选项items来到我们的过滤器 并为正在过滤的列表中的每
  • UIImageView 在 UIScrollView 中捏缩放

    我对使用 UIScrollView 的捏合缩放功能感到满意 但问题是滚动视图中图像的长宽比 目前 我有这个 下图 但我希望图像适合屏幕 如下图所示 景观也有同样的行为 我怎样才能实现这个目标 下面是代码 void viewDidLoad U
  • 在哪里可以找到 tesseract->setvariable 函数的第一个参数的可用属性名称列表?

    从大量的目光中我只能找到其中的一小部分 如下面的 tesseract 的 setVariable 1st param 2nd param 示例 tesseract gt SetVariable tessedit char whitelist
  • 在 Julia 中将 CartesianIndex 数组转换为二维矩阵

    假设我们在 Julia 中有一个笛卡尔索引数组 julia gt typeof indx Array CartesianIndex 2 1 现在我们想使用 PyPlot 将它们绘制为散点图 所以我们应该转换indx 笛卡尔数组到二维矩阵 因
  • 我需要释放这些对象吗?

    我正在使用 Delphi 1 16 位来学习 Pascal 别笑 它工作得很好 而且我买不起更新的版本 我使用 TList 来保存简单地址簿的对象引用 每个对象都添加到 TList 中 如下所示 DataList Add TAddrBook
  • Google App Engine Cloud Endpoints Pr@blem 标记 -> 在干净的 Android 项目上生成 App Engine 错误

    我创建了一个干净的 Android 应用程序A然后我右键单击它并选择Google gt Generate App Engine这导致了这个 错误描述是 Description Resource Path Location Type Ther
  • Java - 如何将 String 设置为 static int

    我有一个只接受字符串的方法 public void setVerticalAlignment String align gd verticalAlignment align accepts only int But gd verticalA
  • tcsh 脚本不退出

    我正在运行 CentOS 7 并且 tcsh 脚本出现问题 我有一个名为 quittest 的简单脚本 bin tcsh echo Simple Test exit 0 当我从终端运行 quittest 时 我得到 Simple Test
  • Azure Functions 和 IHealthCheck

    我需要对 Azure Functions 实施运行状况检查 https learn microsoft com en us aspnet core host and deploy health checks view aspnetcore
  • 如何让这个很长的网址显得很短?

    我已将大部分网站设置为 SE 友好型 但网站的一部分让我感到厌烦 我在其中一个页面中有一个巨大的表单 提交表单 action php page 时 URL 太长 一行包含了半个 word 文档 其中包含所有传递的变量 这是非常丑陋的 有什么
  • 如何在SQL Server中存储unicode字符?

    在 SQL Server 中 我试图创建一个可以存储 unicode 字符的表 具体是这个 https www fileformat info info unicode char 0144 index htm https www filef
  • Python 函数相当于 R 的“pretty()”?

    我正在用 Python 复制一些 R 代码 我被 R 绊倒了pretty 我所需要的只是pretty x where x是一些数字 粗略地说 该函数将 计算漂亮的断点 作为多个 轮 值的序列 我不确定是否有 Python 的等价物 而且我在
  • Google 登录签名的 apk 无法正常工作

    好吧 直到我生成签名的 apk 为止 一切正常 我按照谷歌开发者页面上的说明进行了整个过程 1 我生成了 google services json 文件 其中包含 keyhash 和包名称2 像这样包含所有类级别和应用程序级别依赖项 Top
  • 删除重复项并附带警告

    我有一个包含 rowID 经度 纬度 businessName url 标题的表 这可能看起来像 rowID long lat businessName url caption 1 20 20 Pizza Hut yum com null
  • Angular-UI 全局键绑定

    我已经开始使用 angular ui 按键模块 并且想知道是否有一种方法可以使全局快捷键无论我放置在体内的哪个位置都可以工作 我尝试将 ui keydown 链接到正文 但由于它没有焦点 因此不会触发关键事件 eg 我知道我可以只关注一个
  • 在C++中,当我需要使用枚举时,如何避免#include头文件?

    在我的 C 头文件中 我尝试使用前向声明 class MyClass 而不是 include 类头 正如许多 C 编码标准中所建议的那样 Google C 样式指南就是其中之一 不幸的是 当我引入枚举时 我无法再进行前向声明了 像这样 my
  • 如何使用 Laravel 5.5 身份验证使电子邮件登录不区分大小写

    在构建我的应用程序时 我通过运行使用了 Laravel 身份验证脚手架php artisan make auth这很棒 节省了我很多时间 但是 我遇到了用户无法登录的问题 因为他们不记得最初注册时使用的电子邮件大小写 例如 注册的用户 em