我在sqlite DB中使用Laravel 5.7.3(从5.4更新)中的默认电子邮件身份验证。登录时,我的电子邮件地址经过验证,区分大小写,这不是我想要的。应该允许它使用“ JohnDoe@foobar.com”和“ johndoe@foobar.com”登录。
我试图在用户模型上添加访问器,以始终小写数据库值。
public function getEmailAttribute($value) {
return strtolower($value);
}
但是Auth似乎根本没有使用过这个。另外,我不知道将传入请求中的用户输入更改为小写。
是否有一个简单的区分大小写的开关?还是我需要在哪里更改/添加脚本?
感谢您的支持 丹尼尔
答案 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'));