Как создать настраиваемое поле пароля для Laravel Auth - PullRequest
0 голосов
/ 06 января 2020

Мне нужно войти в систему пользователей, зарегистрированных в таблице Игрехас , которые имеют поля responseavel_cpf и responseavel_senha , но Laravel в функции validateCredentials ожидает имя 'password'.

public function validateCredentials(UserContract $user, array $credentials)
{
    $plain = $credentials['password'];
}

Я попытался войти, используя попытку , но безуспешно:

$userdata = array(
    'responsavel_cpf'      => Input::get('email'),
    'responsavel_senha'    => Input::get('password')
);

if (Auth::guard('igrejas')->attempt($userdata)) {
    return Redirect::to('dashboard_paroquia');
} else {
    return Redirect::to('login');
}

Что мне сделать, чтобы заменить поля по умолчанию электронная почта и пароль с responseavel_cpf и responseavel_senha ?

1 Ответ

0 голосов
/ 06 января 2020

Вы можете переопределить столбец пароля в вашей пользовательской модели следующим образом:

// User.php
public function getAuthPassword()
{
    return $this->custom_pw_field;
}

Однако, если вы действительно хотите передать массив, который явно не содержит password в Auth::guard('xxx')->attempt($credentials) (для которого нет никаких причин!), вам, вероятно, придется переопределить и добавить Illuminate\Auth\EloquentUserProvider вручную, что кажется большой работой.

Так что я бы предложил просто использовать следующее:

Auth::guard('xxx')->attempt([
    'email' => $request->post('email'),
    'password' => $request->post('password')
]);

Клавиша password должна затем проверить соответствие с custom_pw_field, которое вы определили.

Пояснение

Посмотрев на источник Illuminate\Auth\EloquentUserProvider и проверив функцию public function retrieveByCredentials(array $credentials), вы можете увидеть, что он делает:

  • Найти первую запись в таблице аутентификации, которая соответствует всем условиям в массиве $credentials, за исключением password (поэтому просто email в приведенном выше примере ). Таким образом, вы можете добавить, например, еще один ключ, например is_webmaster, например $authGuard->attempt(['email' => $request->post('email'), 'is_webmaster' => 1]), который затем будет извлекать первую запись пользователя, имеющую эти свойства.
  • После получения этой записи ha sh из столбца пароля Затем проверяется против вашего ввода.
...