Сделайте аутентификацию электронной почты без учета регистра в Laravel 5.7 - PullRequest
0 голосов
/ 17 сентября 2018

Я использую аутентификацию электронной почты по умолчанию в Laravel 5.7.3 (только что обновлена ​​с 5.4) с БД sqlite. При входе в систему мой адрес электронной почты проверяется с учетом регистра, что не то, что я хочу. Должно быть разрешено входить через "JohnDoe@foobar.com", а также "johndoe@foobar.com".

Я пытался добавить аксессор в моей модели пользователя, чтобы всегда нижний регистр значения базы данных.

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

Но этот, кажется, вообще не используется Auth. Кроме того, я не знаю, где изменить пользовательский ввод в входящем запросе в нижний регистр.

Есть ли простой конфиг с учетом регистра? Или где мне нужно изменить / добавить скрипты?

Спасибо за вашу поддержку Daniel

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Ваш аксессор должен быть в порядке, но вы должны убедиться, что вы также строчите указанное значение, например, в вашем контроллере:

Предполагая, что вы используете LoginController по умолчанию, поставляемый из Laravel: я переписал *Метод 1003 * из 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);

Но это все еще кажется неполным, и вы, возможно, не хотите манипулировать своими данными таким образом.Я почти уверен, что есть больше возможностей сделать это, но, к сожалению, пока я не могу углубиться в это.Однако моей следующей попыткой будет расширение / запись пользовательского UserProvider.

0 голосов
/ 17 сентября 2018

Вы должны позвонить getEmailAttribute (/ ваш адрес электронной почты здесь /), прежде чем войти в систему и зарегистрироваться, как это

$request->email = getEmailAttribute($request->get('email'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...