bri*_*nna 3 authentication laravel laravel-5 laravel-5.5
在构建我的应用程序时,我通过运行使用了Laravel身份验证脚手架,php artisan make:auth这非常棒并且节省了我很多时间.
但是,我遇到的问题是用户无法登录,因为他们无法记住他们最初注册时用于电子邮件的情况.
例如,注册的用户Myemail@domain.com无法登录myemail@domain.com.
我从我的研究中了解到,在技术上,@之前的部分因规范而区分大小写,并且上面的两封电子邮件在理论上可能属于两个不同的人.在我的情况下,我不认为我有可能需要在登录时强制执行此操作.
我使用的是Postgres数据库,所以我希望只需更换电子邮件数据库中查找Auth::attempt()与ilike替代的like,如果可能的.但是,我不能为我的生活找到它在源头的位置,因此不知道我将如何覆盖它.
Tl; dr如何覆盖Laravel的默认身份验证以不区分大小写的方式进行电子邮件查找?
我最终通过首先采用@btl建议并在email属性上实现mutator方法来解决问题.我不想要为现有用户更改所有电子邮件,感觉好像我遇到了一个问题,我想恢复区分大小写,我想要一个可以解决的问题很容易被撤消.
应用程序/ user.php的
public function getEmailAttribute($value) {
return strtolower($value);
}
Run Code Online (Sandbox Code Playgroud)
应用程序/ HTTP /控制器/认证/ LoginController.php
protected function credentials()
{
$username = $this->username();
$credentials = request()->only($username, 'password');
if (isset($credentials[$username])) {
$credentials[$username] = strtolower($credentials[$username]);
}
return $credentials;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我无法弄清楚如何应用这个相同的逻辑,ForgotPasswordController.php但现在我会活着.无论现在如何,登录似乎都有效.
小智 7
在您的用户模型上添加mutator方法,使电子邮件全部小写:
public function setEmailAttribute($value)
{
$this->attributes['email'] = strtolower($value);
}
Run Code Online (Sandbox Code Playgroud)
每当用户注册时,电子邮件将始终转换为小写.
或者,在用户模型上使用访问者:
public function getEmailAttribute($value)
{
return strtolower($value);
}
Run Code Online (Sandbox Code Playgroud)
这样原始值保存在数据库中,但每当你调用$ user-> email时它都是小写的.在进行严格比较时,您只需要在登录时将用户的输入转换为小写.
| 归档时间: |
|
| 查看次数: |
3163 次 |
| 最近记录: |