Чтобы избавиться от ошибки интерфейса, я добавил интерфейс CanResetPasswordContract в класс GenericUser и использовал класс Illuminate \ Auth \ Passwords \ CanResetPassword для реализации интерфейса.
Итак, я только что добавил:
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
в начале laravel / framework / src / Illuminate / Auth / GenericUser.php, добавил CanResetPasswordContract к реализациям класса и вызвал класс CanResetPassword с:
use canResetPassword;
Внутрикод класса.
Итак, теперь GenericUser, класс, который используется PasswordBroker для извлечения пользователя при восстановлении пароля, реализует интерфейс, и ошибка больше не отображается ...
Конечно, этого недостаточно для исправления всей функциональности, поскольку GenericUser сам по себе не может отправлять электронные письма. Вам нужно разрешить ему быть уведомляемым, чтобы сделать это, вы должны добавить
use Illuminate\Notifications\Notifiable;
к файлу, также используйте Notifiable внутри класса.
На этом этапе, если выпопробуйте еще раз запросить сброс пароля, вы получите электронное письмо с URL-адресом, позволяющим сбросить пароль (если у вас правильная конфигурация email.php, то есть). Но если вы используете его, вы получите сообщение об ошибке, поскольку GenericUser не сможет сохранить изменения в базе данных.
Поэтому вам понадобится модель, способная сохранять данные в базе данных.
Я добавил Eloquent Model, хотя я использую провайдера базы данных, похоже, что Eloquent работает над созданием пользователя, поэтому я решил попробовать:
use Illuminate\Database\Eloquent\Model;
и убедиться, что вы добавили переменную с именемиз вашей таблицы пользователей. Оба эти изменения должны быть внесены в класс GenericUser:
protected $table = 'yourUserTableName';
Также вам необходимо указать, что ваша модель пользователя уже существует (это проверяется перед отправкой электронного письма, в противном случае электронное письмо не отправляется). Поэтому я добавил:
$user->exists = true;
непосредственно перед сохранением на метод resetPassword поставщика / laravel / framework / src / Illuminate / Foundation / Auth / ResetsPasswords.php
Со всеми этими изменениями вместо, функциональность сброса пароля, наконец, работает.
Однако я чувствую, что поступаю противоположно тому, что я должен делать ... Я хотел бы сказать брокеру использовать мой класс User Model вместо изменения GenericUser во что-то, что напоминает моего UserМодель.