如何更改 '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_value、password_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.
所以我刚刚用 Breeze 开始了一个 Laravel 项目,我想更改默认的 table users ,问题是它没有用,我做了几天的研究,但没有得到任何成功的结果
我将尝试解释问题所在以及到目前为止我尝试了什么。
首先,我创建了一个名为 users_data 的新 table,而这个 table 与 完全不同]用户table。 users_data有的字段,例如:name_value、password_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.