代码之家  ›  专栏  ›  技术社区  ›  kirschkern

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

  •  1
  • kirschkern  · 技术社区  · 7 年前

    我使用laravel5.7.3(刚从5.4更新)中的默认电子邮件身份验证和sqlitedb。在登录我的电子邮件地址得到验证区分大小写这不是我想要的。应该允许它使用“登录”JohnDoe@foobar.com“以及”johndoe@foobar.com".

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

    但这个似乎根本没有被Auth使用。另外,我不知道在哪里可以将输入请求中的用户输入改为小写。

    谢谢你的支持 丹尼尔

    2 回复  |  直到 7 年前
        1
  •  2
  •   Tschitsch    7 年前

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

    假设您使用的是Laravel提供的默认LoginController: credentials 方法来自 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);
    }
    

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

    UPDATE users SET email = LOWER(email);
    

        2
  •  0
  •   Shailendra Gupta    7 年前

    您必须调用getEmailAttribute(/ 你的电子邮件在这里 /)

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