Как изменить таблицу аутентификации пользователей и использовать вместо нее другую Laravel

Итак, я только что начал проект 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.

Jed 13.05.2022 11:34

проблема в том, что у меня нет класса LoginController, когда я делаю это через Breeze, он не генерирует LoginController (я не знаю, является ли это вещью версии), однако, когда я делаю это через леса Auth (ремесленник PHP делает : Auth) он его генерирует. я больше привык к бризу, однако я мог бы перейти на леса Auth в одиночку

haruk1515 13.05.2022 11:39

так как вы переопределили метод имени пользователя?

Jed 13.05.2022 11:41

сначала я сказал, что переопределяю функцию имени пользователя, которая находится в vendor/laravel/ui/auth-back/AuthenticatesUsers, однако я думаю, что ошибаюсь в этом. Я удалил внесенные там изменения и переопределил их в новой модели, которую я сделал «UsersModel». '

haruk1515 13.05.2022 11:46

поэтому я перезаписываю функцию имени пользователя в новой модели

haruk1515 13.05.2022 11:47
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не думаю, что это хорошая практика - редактировать файлы поставщиков. Мы не отправляем их в систему управления версиями, поэтому ваши изменения не будут доступны другим разработчикам. Кроме того, в 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.

Хотя я этого не делал, нравится это при редактировании файлов поставщиков, хорошо, я попытаюсь применить ваш ответ, и я надеюсь, что он сработает, большое спасибо!

haruk1515 13.05.2022 12:00

jed У меня есть вопрос, нужно ли мне делать то же самое с паролем?, public function getAuthPassword() { return $this->password_value; }, добавьте это в модель или контроллер, как вы показали мне с именем пользователя (), и еще одна вещь, в представлении входа в систему необходимо оставить имя пароля как есть или я могу изменить (потому что имя электронной почты, которое я изменил на данный момент )

haruk1515 13.05.2022 14:27

@ haruk1515 я обновил свой ответ. Если вы продолжите использовать password_value в своей модели, ваши данные в представлении должны быть такими же.

Jed 13.05.2022 15:15

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