所以我刚开始了一个用Breeze做的Laravel项目,我想改变默认的表users,问题是它不起作用,我做了好几天的研究,没有得到任何成功的结果
我会尽量解释问题所在,以及到目前为止我尝试了些什么。
首先,我创建了一个名为users_data的新表,这个表与用户表完全不同。users_data所拥有的字段有: name_value、password_value、age_value、email_value等(我还必须提到,对于表users_data,它不使用迁移,因为我已经有了一个sql文件,并将其直接添加到db中(我已经创建了带有主键的表和外键,所以我无法进行迁移,因为这需要很长的时间),而没有迁移,我仍然可以获得数据,所以我认为不可能是这个问题)。
实际上,我使用的是Breeze,但是,我也使用了Auth脚手架(PHP手工制作: Auth)
我试过什么:
经过几天的搜索,首先我创建了一个名为UsersModel的新模型,它的内容与用户模型相同,但是我要更改的是:
protected $table = 'users_data';
protected $fillable = [
*name_value*,
*password_value*,
];
还有一个额外的函数来覆盖默认的密码或Auth (我猜):
public function getAuthPassword()
{
return $this->password_value;
}
接下来我去了conf/auth.php
在这里,我指定了模型:
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\UsersModel::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 (登录的验证),在那里我将电子邮件替换为name_value
我试着调试这个:
dd(Auth::attempt($this->only('name_value', 'password'), $this->boolean('remember')));
并返回false
我注意到vendor/laravel/ui/auth-back/AuthenticatesUsers中有一个名为username()
的函数,它返回“电子邮件”
当我看到我记得有一个页面说这个函数也可以覆盖,所以我把返回值更改为name_value,它什么也不做
最后,澄清一下,
我不需要注册站点,我只需要登录页面,因此在$fillable中,我没有添加数据库的所有列,只添加我需要登录的列(name_value,password_value)。
如果有人能帮助我并指导我,那将是很棒的,因为我已经没有想法了(我可以单独使用PHP,但是,我需要->middleware 'Auth,如果用户存在的话,有没有办法激活中间件?)
发布于 2022-05-13 09:54:04
我不认为编辑供应商文件是很好的做法。我们不会把它们推到版本控制上,这样其他开发人员就不会有您的更改。另外,Laravel已经有了一种不用编辑供应商文件就可以重写用户名值的方法。
只需像这样使用您的auth控制器中的特性:
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;
}
我还没有对此进行测试,但根据文档,您应该这样做。还要确保阅读这个拉勒维尔博士。
发布于 2022-11-14 15:43:38
所以您可能有一个名为users_data.php的模型。进去,把代码修改成类似的东西。
步骤:1
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\users_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' => App\Models\User::class,
],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
将“model”=> App\model\User::class改为“model”=> App\Models\users_data::class,这是将应用程序默认放置到User表中的主要角色。
步骤:3对User.php进行注释,这样以后的冲突就不会产生。现在,您的应用程序已被转移到所需的表中,并准备登录。
https://stackoverflow.com/questions/72227104
复制相似问题