Laravel身份验证 - 不同表中的用户名和密码

时间:2018-01-19 11:01:01

标签: laravel-5.5

在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');
        }
    }
?>

enter image description here

1 个答案:

答案 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'];
}

因此,未定义的索引。