如何更改 'users' auth table 并使用另一个 Laravel

How to change 'users' auth table and use another instead Laravel

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

我将尝试解释问题所在以及到目前为止我尝试了什么。

首先,我创建了一个名为 users_data 的新 table,而这个 table 与 完全不同]用户table。 users_data有的字段,例如:name_valuepassword_value , age_value, email_value, 等等(我也不得不提到table users_data,它没有使用迁移,因为我已经有一个 sql 文件,并直接将它添加到数据库中(我已经已创建 tables,具有主键和外键,所以我无法进行迁移,因为这会花费我很多时间),并且没有迁移我仍然可以获得数据,所以我不不认为这可能是问题所在)。

实际上我正在使用 Breeze,但是,我也使用了 Auth 脚手架(PHP artisan make: Auth)

我尝试了什么:

经过几天的搜索,首先我创建了一个新的模型,叫做UsersModel,这个的内容和User[=84=一样] 模型然而我改变的是:

protected $table = 'users_data';

protected $fillable = [
    *name_value*,
    *password_value*,
];

和一个额外的功能来覆盖 breeze 或 Auth(我猜)的默认 密码

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

接下来我去了conf/auth.php

那里我指定了型号:

   'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\UsersModel::class,
        ],

和table使用:

/*
|--------------------------------------------------------------------------
| 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(登录验证),在那里我将电子邮件替换为 name_value

我试着调试这个:

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

和returns false

我注意到 vendor/laravel/ui/auth-back/AuthenticatesUsers 中有一个函数 称为 username(),即 returns 'email'

看的时候记得有网页说这个函数也可以override,所以我把return的值改成name_value,也没用

最后,澄清一下,

我不需要注册站点,我只需要登录页面,因此在 $fillable 中,我没有添加数据库的所有列,只添加了我需要登录的列 (name_value,password_value)

如果有人能帮助我并指导我,那就太好了,因为我 运行 没有想法(我可以单独使用 PHP,但是,我需要 ->middleware ['Auth],如果用户存在,有没有办法激活middlware?)

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

只需像这样在您的身份验证控制器中使用特征:

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 doc.