Итак, я только что начал проект Laravel с Breeze и хотел изменить таблицу по умолчанию пользователи , проблема в том, что это не сработало, я несколько дней проводил исследования и не получил никакого успешного результата.
Я попытаюсь объяснить, в чем проблема и что я пробовал до сих пор.
Сначала я создал новую таблицу с именем user_data, и эта таблица полностью отличается от таблицы пользователи. Поля, которые есть у user_data, например: имя_значение, пароль_значение, возраст_значение, электронная почта_значение и т. д. (Я также должен упомянуть, что для таблицы user_data не используется миграция, потому что у меня уже есть файл sql, и я добавил непосредственно в БД (у меня уже созданы таблицы с первичными и внешними ключами, поэтому я не мог выполнить миграцию, потому что это заняло бы у меня много времени), и без миграции я все еще могу получить данные, так что я не думаю, что это может быть проблемой).
На самом деле я использую Breeze, однако я также использовал леса Auth (ремесленник PHP: Auth)
Что я пробовал:
После нескольких дней поиска я сначала создал новую модель под названием UsersModel, содержание которой такое же, как у модели Пользователь, однако я изменил следующее:
protected $table = 'users_data';
protected $fillable = [
*name_value*,
*password_value*,
];
и дополнительная функция для переопределения пароль по умолчанию для бриза или аутентификации (я думаю):
public function getAuthPassword()
{
return $this->password_value;
}
затем я пошел в conf/auth.php
там я указал Модель:
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\UsersModel::class,
],
и таблица для использования:
/*
|--------------------------------------------------------------------------
| Authentication Table
|--------------------------------------------------------------------------
|
| When using the "Database" authentication driver, we need to know which
| table should be used to retrieve your users. We have chosen a basic
| default value but you may easily change it to any table you like.
|
*/
'table' => 'users_data',
после этого я перешел к представлению логин.blade.php и изменил только ввод электронной почты (для того, что я читал на разных страницах, изменение ввод пароля вызовет разные проблемы, потому что мне нужно было бы внести много изменений, чтобы заставить его работать, поэтому лучшая идея переопределить его с помощью getAuthPassword, указанного в модели):
ввод нового имени:
x-input id = "email" class = "block mt-1 w-full" type = "text" name = "name_value" :value = "old('name_value')" required autofocus />
После всего этого я зашел на ЛогинЗапрос (проверка входа), где заменил почту на имя_значение
Я попытался отладить это:
dd(Auth::attempt($this->only('name_value', 'password'), $this->boolean('remember')));
и возвращает ложь
Я заметил, что в поставщик/laravel/ui/auth-back/AuthenticatesUsers есть функция
называется username(), который возвращает «электронную почту»
когда я увидел это, я вспомнил страницу, на которой говорилось, что эта функция тоже может переопределять, поэтому я изменил возвращаемое значение на name_value, и это ничего не делает.
последнее, просто чтобы уточнить,
Мне не нужен сайт регистрации, мне нужна только страница входа, поэтому для этого в $fillable я не добавлял все столбцы базы данных, а только те, которые мне нужны для входа (имя_значение, пароль_значение)
Если бы кто-нибудь мог помочь мне и направить меня, это было бы здорово, потому что у меня заканчиваются идеи (я мог бы сделать это только с PHP, однако мне нужен -> промежуточное ПО ['Аутентификация], есть ли способ активировать промежуточное программное обеспечение, если пользователь существует? )
проблема в том, что у меня нет класса LoginController, когда я делаю это через Breeze, он не генерирует LoginController (я не знаю, является ли это вещью версии), однако, когда я делаю это через леса Auth (ремесленник PHP делает : Auth) он его генерирует. я больше привык к бризу, однако я мог бы перейти на леса Auth в одиночку
так как вы переопределили метод имени пользователя?
сначала я сказал, что переопределяю функцию имени пользователя, которая находится в vendor/laravel/ui/auth-back/AuthenticatesUsers, однако я думаю, что ошибаюсь в этом. Я удалил внесенные там изменения и переопределил их в новой модели, которую я сделал «UsersModel». '
поэтому я перезаписываю функцию имени пользователя в новой модели






Я не думаю, что это хорошая практика - редактировать файлы поставщиков. Мы не отправляем их в систему управления версиями, поэтому ваши изменения не будут доступны другим разработчикам. Кроме того, в Laravel уже есть способ переопределить значение имени пользователя без редактирования файлов поставщиков.
Просто используйте трейт в вашем контроллере аутентификации следующим образом:
public class MyLoginController {
use AuthenticatesUsers; // or you can also use ThrottlesLogins trait
// then override the username function here
public function username() {
return 'name_value';
}
}
Чтобы переопределить пароль, вы можете определить это на своей модели User:
public function getPasswordAttribute() {
return $this->attributes['password_value'];
}
public function getAuthPassword() {
return $this->password_value;
}
Я не проверял это, но, основываясь на документах, вы должны это сделать. Также обязательно прочитайте этот Документ Laravel.
Хотя я этого не делал, нравится это при редактировании файлов поставщиков, хорошо, я попытаюсь применить ваш ответ, и я надеюсь, что он сработает, большое спасибо!
jed У меня есть вопрос, нужно ли мне делать то же самое с паролем?, public function getAuthPassword() { return $this->password_value; }, добавьте это в модель или контроллер, как вы показали мне с именем пользователя (), и еще одна вещь, в представлении входа в систему необходимо оставить имя пароля как есть или я могу изменить (потому что имя электронной почты, которое я изменил на данный момент )
@ haruk1515 я обновил свой ответ. Если вы продолжите использовать password_value в своей модели, ваши данные в представлении должны быть такими же.
Я думаю, было бы также полезно, если бы мы могли увидеть ваш класс LoginController.