如何更改"用户"身份验证表并使用另一个 Laravel。



所以我刚刚用Breeze开始了一个Laravel项目,我想改变默认表users问题是它没有起作用,我做了几天的研究,但我没有得到任何成功的结果

我将试着解释问题是什么,以及到目前为止我做了什么。

首先,我创建了一个名为users_data的新表。,这个表与用户完全不同。表格users_data包含的字段有,例如:name_valuepassword_valueage_valueemail_value等(我不得不提的是,对于表users_data,它不使用迁移,因为我已经有一个sql文件,并将其直接添加到db(我已经创建了表,主键和外键,所以我不能做迁移,因为它会花费我很多时间),没有迁移,我仍然可以得到数据,所以我不认为这可能是这个问题)。

实际上我使用的是微风,然而,我使用了Auth脚手架(PHP工匠make: Auth)太

What have I try:

经过几天的搜索,首先我创建了一个新的模型,名为UsersModel,此内容与User相同模型,但是我改变的是:
protected $table = 'users_data';
protected $fillable = [
*name_value*,
*password_value*,
];

和覆盖默认密码的额外函数微风或Auth(我猜):

public function getAuthPassword()
{
return $this->password_value;
}

接下来我进入conf/auth.php

这里我指定了Model:

'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => AppModelsUsersModel::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',
在此之后,我转到视图login.blade.php,并且只更改了电子邮件输入(对于我在不同页面上阅读的内容,更改密码输入将导致不同的问题,因为我需要进行大量更改以使其工作,所以最好的主意是用getAuthPassword覆盖它(在模型中指定):

新名称输入:

x-input id="email" class="block mt-1 w-full" type="text" name="name_value" :value="old('name_value')" required autofocus />

在这一切之后,我去了LoginRequest(登录验证),其中我将email替换为name_value

我试着调试这个:

dd(Auth::attempt($this->only('name_value', 'password'), $this->boolean('remember')));

并返回false

我注意到在vendor/laravel/ui/auth-back/AuthenticatesUsers中有一个函数叫做username(),它返回'email'

当我看到时,我记得有一个页面说这个函数也可以重写,所以我将返回值更改为name_value,它什么也不做

最后,澄清一下,

我不需要注册网站,我只需要登录页面,所以在$fillable我没有添加数据库的所有列,只是那些我需要登录(name_valuepassword_value)

如果有人能帮助我并指导我,那将是伟大的,因为我已经没有想法了(我可以单独使用PHP,但是,我需要->中间件['Auth],如果用户存在,是否有一种方法来激活中间件?)

那么您可能有一个名为users_data.php的模型。进入它并将代码更改为如下内容:

步骤:1

<?php
namespace AppModels;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
use IlluminateFoundationAuthusers_data as Authenticatable;  //Add this line for Auth.

class users_data extends Authenticatable   //Extends child from Authenticatable parent class obj.
{
use HasFactory;
protected $fillable = ['column1', 'column2', 'column3', .....];
}

步骤:2转到config/auth.php。您可能会在下面找到类似的内容。

'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => AppModelsUser::class,
],
// 'users' => [
//     'driver' => 'database',
//     'table' => 'users',
// ],
],

更改'model' =>AppModelsUser::class, to 'model' =>模型应用 users_data::类,这是剧中的主角,默认情况下将应用程序放到用户表中。

步骤:3注释掉User.php,这样以后就不会产生冲突。现在,您的应用程序已经转移到所需的表中,并准备登录。

我不认为编辑供应商文件是好的做法。我们不会把它们推到版本控制,这样其他开发人员就不会看到您的更改。此外,Laravel已经有一种方法可以在不编辑供应商文件的情况下覆盖用户名值。

就像这样在你的认证控制器中使用trait:

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文档。

最新更新