如何在 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 标准和命名约定,因为这样可以更轻松地使用整个框架。
我在 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 标准和命名约定,因为这样可以更轻松地使用整个框架。