在laravel 5.2中重置密码输入的电子邮件区分大小写,使其不敏感

时间:2017-05-11 09:25:57

标签: php laravel

我正在开发laravel5.2项目,我正在使用laravel的默认auth模块,它还为我们提供了重置密码功能。

如果用户已注册

,我将遇到问题
abcd@gmail.com

如果用户输入电子邮件以重置密码

Abcd@gmail.com

如果是这样,它会抛出错误帐户,此电子邮件不存在。

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

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

2 个答案:

答案 0 :(得分:2)

在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);
    }

答案 1 :(得分:0)

全部归结为归类。

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

很明显,MySQL适配器在进行查询时确实使用LIKE,但是如果列排序规则允许,则仅返回不区分大小写的结果。我不是。

关于堆栈排序问题MySQL case insensitive select,有关于MySQL排序规则和区分大小写的更多讨论。 以及official MySQL documentation中。