Как использовать мою собственную существующую таблицу для аутентификации в laravel 8?

Я установил auth в laravel 8, но я не хочу использовать таблицу по умолчанию, предназначенную для аутентификации Пользователи, потому что у меня есть таблица Users_inf в этом Если я не могу использовать миграцию, Users_inf также имеет 200 записей. Users_inf (идентификатор_пользователя, пароль, имя_пользователя, привилегии, активный, CREATED_AT, UPDATED_AT). CREATED_AT и UPDATED_AT, добавленные мной для совместимости с laravel. Я использую user_name для входа, а не электронную почту. пожалуйста, любые предложения по этой проблеме.


person Jon    schedule 14.10.2020    source источник
comment
Вы можете изменить поставщика модели в config / auth.php Найдите 'model' = ›App \ User :: class и измените его на свой класс, например. Приложение \ UsersInf :: класс   -  person Anurat Chapanond    schedule 14.10.2020


Ответы (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 и соглашениям об именах, так как это упростит работу с фреймворком в целом.

person Qirel    schedule 14.10.2020
comment
Спасибо, попробую ваши подходы. - person Jon; 14.10.2020
comment
Спасибо тебе большое. - person Jon; 15.10.2020