Я установил auth в laravel 8, но я не хочу использовать таблицу по умолчанию, предназначенную для аутентификации Пользователи, потому что у меня есть таблица Users_inf в этом Если я не могу использовать миграцию, Users_inf также имеет 200 записей. Users_inf (идентификатор_пользователя, пароль, имя_пользователя, привилегии, активный, CREATED_AT, UPDATED_AT). CREATED_AT и UPDATED_AT, добавленные мной для совместимости с laravel. Я использую user_name для входа, а не электронную почту. пожалуйста, любые предложения по этой проблеме.
Как использовать мою собственную существующую таблицу для аутентификации в laravel 8?
Ответы (1)
На мой взгляд, у вас есть два варианта. Либо измените users
таблицу, чтобы в ней были эти поля, затем импортируйте данные из одной таблицы в другую, либо обновите свою User
модель, чтобы использовать эту таблицу. В любом случае вы должны указать Laravel использовать поле user_name
для аутентификации. Лично я бы рекомендовал пойти первым путем, так как это путь Laravel.
Подход 1: изменение таблицы пользователей
Измените миграцию таблицы users
, что-нибудь в этом роде. Я бы порекомендовал вам сохранить поле ID id
вместо того, чтобы указывать свое собственное user_id
, поскольку это - опять же - способ работы Laravey.
Schema::create('users', function (Blueprint $table) {
$table->id('user_id'); // $table->id();
$table->string('user_name')->unique();
$table->string('privilege')->nullable();
$table->string('password');
$table->boolean("active")->default(true);
$table->rememberToken();
$table->timestamps();
});
Затем, чтобы переместить данные, выполните следующий SQL-запрос
INSERT INTO users (user_id, user_name, privilege, active, password, created_at, updated_at)
SELECT user_id, user_name, privilege, active, password, created_at, updated_at
FROM users_inf AS ui
WHERE NOT EXISTS(SELECT 1
FROM users AS u
WHERE u.user_name = ui.user_name)
Теперь вам просто нужно указать Laravel использовать поле user_name
, которое мы рассмотрим в конце этого ответа.
Подход 2: изменение модели пользователя
Laravel позволяет вам указать, какая таблица и какое поле является первичным ключом, путем добавления простых свойств в модель. Внутри вашего класса модели User
добавьте следующие две строки:
protected $table = 'users_inf';
protected $primaryKey = 'user_id';
Для обоих подходов: использование поля user_name
в качестве логина
Просто добавьте метод username()
в класс модели User
, который возвращает поле, которое Laravel должен использовать для поиска пользователей в данной таблице.
public function username()
{
return 'user_name';
}
Laravel даст вам так много бесплатно, и многие функции будут работать более плавно при использовании правильных соглашений об именах. Я предлагаю вам следовать стандартам Laravel и соглашениям об именах, так как это упростит работу с фреймворком в целом.