如何在 laravel 8 中使用我自己预先存在的 table 进行身份验证?

How to use my own pre-existing table for authentication in laravel 8?

我在 laravel 8 中安装了 auth,但我不想使用默认的 table 专用于身份验证 Users 因为我有 table Users_inf 在这种情况下我不能使用迁移,Users_inf 也有 200 条记录。 Users_inf(user_id,密码,user_name,权限,活动,CREATED_AT,UPDATED_AT)。 我添加的 CREATED_AT 和 UPDATED_AT 与 laravel 兼容。 我使用 user_name 登录而不是电子邮件。请就此问题提出任何建议。

在我看来,你有两个选择。要么更改 users table 以包含这些字段,然后将数据从一个 table 导入另一个 - 或者更新您的 User 模型以使用该 table .在任何情况下,您都必须指示 Laravel 使用 user_name 字段进行身份验证。我个人建议走第一条路线,因为那是“Laravel 方式”。

方法 1:改变用户 table

改变 users table 的迁移,类似于此。我建议您保留 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 允许您通过向模型添加简单属性来指定哪个 table 和哪个字段是主键。在您的 User 模型 class 中,添加以下两行,

protected $table = 'users_inf';
protected $primaryKey = 'user_id';

对于这两种方法:使用 user_name 字段作为登录名

只需将 username() 方法添加到 User 模型 class 中,returns Laravel 应该用来在给定 table.

public function username()
{
    return 'user_name';
}

Laravel 将为您“免费”提供如此多的功能,并且在使用正确的命名约定时,许多功能将更加无缝地工作。我建议您遵循 Laravel 标准和命名约定,因为这样可以更轻松地使用整个框架。