Php laravel 5.2中输入的重置密码电子邮件区分大小写,不区分大小写

Php laravel 5.2中输入的重置密码电子邮件区分大小写,不区分大小写,php,laravel,Php,Laravel,我正在从事laravel5.2项目,我正在使用laravel的默认身份验证模块,该模块还为我们提供重置密码功能 use Illuminate\Http\Request; use Illuminate\Support\Facades\Password; public function sendResetLinkEmail(Request $request) { $this->validateEmail($request);

我正在从事laravel5.2项目,我正在使用laravel的默认身份验证模块,该模块还为我们提供重置密码功能

    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Password;

    public function sendResetLinkEmail(Request $request)
    {
        $this->validateEmail($request);

        $data['email'] = strtolower($request->email);
        $response = $this->broker()->sendResetLink($data);

        return $response == Password::RESET_LINK_SENT
                ? $this->sendResetLinkResponse($response)
                : $this->sendResetLinkFailedResponse($request, $response);
    }
我面临的问题的情况下,如果用户是注册的

abcd@gmail.com
如果用户输入电子邮件重置密码是

Abcd@gmail.com
在这种情况下,它抛出的错误与此电子邮件帐户不存在

正如我们所看到的,这两封邮件都是相同的,但仅仅因为第二封邮件中的第一个字母大写,它就抛出了错误


如何使此功能不区分大小写?

搜索电子邮件的文件路径为illumb\Foundation\Auth\ResetsPasswords。但您不想编辑此文件。此文件包含在PasswordController类中使用的php特性。 因此,您可以通过重写trait方法来更改其功能

postEmail是要覆盖的方法,用于查找具有给定电子邮件的用户并发送重置链接。使用ilike不敏感地通过电子邮件大小写查找用户。然后用确切的用户电子邮件覆盖请求电子邮件变量

以下是PasswordController类(App\Http\Controllers\Auth\PasswordController)中的代码


搜索电子邮件所用文件的路径\Foundation\Auth\ResetsPasswords。但您不想编辑此文件。此文件包含在PasswordController类中使用的php特性。 因此,您可以通过重写trait方法来更改其功能

postEmail是要覆盖的方法,用于查找具有给定电子邮件的用户并发送重置链接。使用ilike不敏感地通过电子邮件大小写查找用户。然后用确切的用户电子邮件覆盖请求电子邮件变量

以下是PasswordController类(App\Http\Controllers\Auth\PasswordController)中的代码


在ForgotPasswordController.php中添加此函数以覆盖默认功能

    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Password;

    public function sendResetLinkEmail(Request $request)
    {
        $this->validateEmail($request);

        $data['email'] = strtolower($request->email);
        $response = $this->broker()->sendResetLink($data);

        return $response == Password::RESET_LINK_SENT
                ? $this->sendResetLinkResponse($response)
                : $this->sendResetLinkFailedResponse($request, $response);
    }

在ForgotPasswordController.php中添加此函数以覆盖默认功能

    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Password;

    public function sendResetLinkEmail(Request $request)
    {
        $this->validateEmail($request);

        $data['email'] = strtolower($request->email);
        $response = $this->broker()->sendResetLink($data);

        return $response == Password::RESET_LINK_SENT
                ? $this->sendResetLinkResponse($response)
                : $this->sendResetLinkFailedResponse($request, $response);
    }

这一切都归结于整理

我最近在一个使用Laravel5.2的旧站点上也遇到了这个问题。事实证明,将数据库中电子邮件列的排序规则从utf8mb4_bin更改为utf8mb4_unicode_ci解决了这个问题

显然,MySQL适配器在进行查询时确实使用LIKE,但只有在列排序规则允许的情况下才返回不区分大小写的结果。我的不是

关于这个堆栈溢出问题,MySQL排序和区分大小写的主题有更多的讨论:
以及在美国

这一切都归结于整理

我最近在一个使用Laravel5.2的旧站点上也遇到了这个问题。事实证明,将数据库中电子邮件列的排序规则从utf8mb4_bin更改为utf8mb4_unicode_ci解决了这个问题

显然,MySQL适配器在进行查询时确实使用LIKE,但只有在列排序规则允许的情况下才返回不区分大小写的结果。我的不是

关于这个堆栈溢出问题,MySQL排序和区分大小写的主题有更多的讨论:
以及在美国

在搜索密码数据之前,可以对密码数据使用strtolower()函数database@OdinThunder是的,我知道,但是我没有得到它搜索电子邮件存在的文件/函数。在它搜索之前,可以对密码数据使用strtolower()函数database@OdinThunder是的,我知道,但是我没有得到它搜索电子邮件存在的文件/函数。