在laravel中遇到身份验证问题,因为我在不同的表中使用了用户名和密码。由于Auth对用户名和密码使用相同的表,但我的数据库已经设置,其中用户名在表用户中,密码在表webpages_membership中,我无法更改数据库结构,因为该数据库也被其他移动应用程序和网站使用。那么如何使用Auth登录系统呢。
@btl:
我尝试了解决方案,但现在还有另一个错误
"Undefined index: password" in vendor\laravel\framework\src\Illuminate\Auth\GenericUser.php
以下是我的用户型号代码。
代码:
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use App\WebPages_Membership;
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $table = 'Users';
protected $dbPrefixOveride = '';
protected $primaryKey = 'UserId';
protected $fillable = [
'Username', 'FirstName', 'LastName','Email','MobileNumber','CreatedBy','CreatedDate','ModifiedBy','ModifiedDate','DistributorId','Telephone','IsAuthorized','AlternateMobileNumber','AlternateEmail','IsDeleted','UnauthorizationRemark'
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
/*protected $hidden = [
'password', 'remember_token',
];*/
public function webpagesMembership() {
return $this->hasOne(WebPages_Membership::class);
}
public function getPasswordAttribute() {
return $this->webpagesMembership->getAttribute('Password');
}
}
?>
答案 0 :(得分:1)
我做这样的事情。假设你的表之间存在一对一的关系。
定义User和WebpagesMembership模型之间的关系。您的用户模型将具有以下内容:
public function webpagesMembership() {
return $this->hasOne(WebpagesMembership::class);
}
添加访问者功能
public function getPasswordAttribute() {
return $this->webpagesMembership->getAttribute('password');
}
当Auth尝试访问您的用户模型上的密码属性时,Auth会正常工作。
编辑:
将password
添加到用户模型的$appends
媒体资源中:
protected $appends = [
'password'
];
这将表现为它现在是模型的属性。您遇到的错误是因为GenericUser
的属性是在构造函数中设置的,password
不存在。然后,它尝试访问password
:
public function getAuthPassword()
{
return $this->attributes['password'];
}
因此,未定义的索引。