我正在开发laravel5.2项目,我正在使用laravel的默认auth模块,它还为我们提供了重置密码功能。
如果用户已注册
,我将遇到问题abcd@gmail.com
如果用户输入电子邮件以重置密码
Abcd@gmail.com
如果是这样,它会抛出错误帐户,此电子邮件不存在。
正如我们所看到的,两封电子邮件都是相同的,但仅仅因为第二封电子邮件中的第一个字母大写,这就是错误。
如何使此功能不区分大小写?
答案 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中。