Таблица Laravel Fortify password_resets с настраиваемым полем электронной почты для входа

Я использую другую таблицу и имена полей для аутентификации с помощью Fortify.

конфигурация / fortify.php

      'username' => 'new_email',
'email' => 'new_email',

Модели / User.php

      protected $table = 'new_users';
protected $primaryKey = 'new_id';
public $timestamps = true;
const CREATED_AT = 'new_created';
const UPDATED_AT = 'new_updated';

Сам логин рабочий.

Сброс пароля

Вы можете видеть, что на данный момент у меня есть два поля электронной почты в моей форме, у меня есть «электронная почта» и жестко запрограммировано «new_email», чтобы увидеть, что происходит, когда я отправляю оба поля.

      <form action="/forgot-password" method="post">
    @csrf

    <div>
        <label for="new_email">Email</label>
        <input type="email" id="new_email" name="new_email" value="{{ old('new_email') }}" autofocus>
    </div>

    <input type="hidden" name="email" id="email" value="something@something.com">
    <div>
        <button onclick="alert(document.getElementById('email').value)">
            Email Password Reset Link
        </button>
    </div>
</form>

Когда я сохраняю поле электронной почты таблицы password_resets как «электронная почта», я получаю эту ошибку (даже когда я отправляю «электронную почту») ...

SQLSTATE[23000]: нарушение ограничения целостности: 1048 Столбец «электронная почта» не может быть пустым (SQL: вставить в (, token, created_at) значения (?, $2y$10$0ITPezqPt2on8DSsnvruSeB4qV4k4mcg7Yabty6vW6lF4ryzC2bGm, 2021-03-16 14:16:17))

Если я изменю поле электронной почты в 'password_resets' на 'new_email', я получу эту ошибку ...

SQLSTATE[42S22]: столбец не найден: 1054 Неизвестный столбец «электронная почта» в «предложении где» (SQL: выберите * из password_resets куда email является нулевым пределом 1)

Есть ли способ сделать это? Я предполагаю, что это будет в файле ResetUserPassword.php, если это возможно. Я просто использую по умолчанию ...

Действия / Fortify / ResetUserPassword.php

      {
    use PasswordValidationRules;

    public function reset($user, array $input)
    {
        Validator::make($input, [
            'password' => $this->passwordRules(),
        ])->validate();

        $user->forceFill([
            'password' => Hash::make($input['password']),
        ])->save();
    }
}

Когда я делаю php artisan route:list Я вижу, что когда я отправляю сообщение по маршруту «забыл пароль», он использует ...

Laravel\Fortify\Http\Controllers\PasswordResetLinkController@ store

Могу я опубликовать это, чтобы отредактировать?

Можно ли изменить имя поля электронной почты и при этом сбросить рабочий пароль? Я делаю что-то неправильно?

0 ответов

Другие вопросы по тегам