在Laravel 5.7中使电子邮件身份验证不区分大小写

时间:2018-09-17 09:18:10

标签: laravel authentication

我在sqlite DB中使用Laravel 5.7.3(从5.4更新)中的默认电子邮件身份验证。登录时,我的电子邮件地址经过验证,区分大小写,这不是我想要的。应该允许它使用“ JohnDoe@foobar.com”和“ johndoe@foobar.com”登录。

我试图在用户模型上添加访问器,以始终小写数据库值。

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

但是Auth似乎根本没有使用过这个。另外,我不知道将传入请求中的用户输入更改为小写。

是否有一个简单的区分大小写的开关?还是我需要在哪里更改/添加脚本?

感谢您的支持 丹尼尔

2 个答案:

答案 0 :(得分:2)

您的访问器应该没问题,但是您应该确保还小写给定的值,例如在您的控制器中:

假设您使用的是Laravel随附的默认LoginController: 我从credentials的{​​{1}}改写了AuthenticatesUsers方法

App\Http\Controllers\Auth\LoginController

当数据库中存储的所有电子邮件均已全小写时,此方法可以正常工作。如果您是从头开始,则可以强制将电子邮件默认存储为小写。只需在protected function credentials(Request $request) { $credentials = [ $this->username() => strtolower($request->get($this->username())), "password" => $request->get("password") ]; return $credentials; } 中实现以下增变器:

App\User

如果您已经存储了大小写混合的电子邮件,则可以使用以下查询将所有电子邮件更新为小写电子邮件:

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

但是这仍然感觉不完整,您可能不想以这种方式操作数据。我非常确定,有更多的可能性可以实现这一目标,但不幸的是,我暂时无法对此进行深入研究。但是,我的下一个尝试是扩展/编写自定义UserProvider。

答案 1 :(得分:0)

您必须致电getEmailAttribute(/ 您的电子邮件在这里 /) 像这样登录和注册之前

$request->email = getEmailAttribute($request->get('email'));