Laravel Authentication — имя пользователя и пароль в разных таблицах

возникает проблема с аутентификацией в laravel, так как у меня есть имя пользователя и пароль в разных таблицах. Поскольку Auth использует одну и ту же таблицу для имени пользователя и пароля, но моя база данных уже настроена, где имя пользователя находится в таблице пользователей, а пароль в таблице webpages_membership, и я не могу изменить структуру базы данных, потому что эта база данных также используется другим мобильным приложением и веб-сайтом. Итак, как мне использовать Auth для системы входа в систему.

@бтл:

Я попробовал решение, но теперь есть еще одна ошибка

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

введите здесь описание изображения


person Juned Ansari    schedule 19.01.2018    source источник


Ответы (1)


Я бы сделал что-то вроде этого. Предполагая отношение один к одному между вашими таблицами.

Определите связь между моделями User и WebpagesMembership. Ваша модель пользователя будет иметь следующее:

public function webpagesMembership() {
    return $this->hasOne(WebpagesMembership::class);
}

Добавьте функцию доступа

public function getPasswordAttribute() {
    return $this->webpagesMembership->getAttribute('password');
}

Таким образом, Auth будет работать, когда он попытается получить доступ к атрибуту пароля в вашей модели пользователя.

Редактировать:

Добавьте password к свойству $appends модели User:

 protected $appends = [
    'password'
 ];

Теперь это будет действовать так, как если бы это был атрибут модели. Ошибка, с которой вы столкнулись, была связана с тем, что атрибуты GenericUser устанавливались в конструкторе, а password не существовало. Затем он попытался получить доступ к password в:

public function getAuthPassword()
{
    return $this->attributes['password'];
}

Следовательно, неопределенный индекс.

person Community    schedule 19.01.2018
comment
Спасибо за быстрый ответ. Можете ли вы помочь мне с тем, где я могу написать публичную функцию getPasswordAttribute()? - person Juned Ansari; 19.01.2018
comment
Добавьте это также к модели User. - person ; 19.01.2018
comment
Можете ли вы отредактировать свой вопрос с отформатированной моделью пользователя? Намного легче читать. - person ; 20.01.2018
comment
Я только что заметил, что у вас есть пароль в массиве свойств $hidden. Может попробовать удалить оттуда? - person ; 20.01.2018
comment
но это закомментированный код, та же ошибка undefined index:password - person Juned Ansari; 20.01.2018
comment
А, нвм. password пишется с большой буквы? Это все в нижнем регистре в классе GenericUser. Это может быть проблемой. - person ; 20.01.2018
comment
я уже пробовал это, у меня есть столбец в таблице Password, поэтому я соответствующим образом меняю этот столбец во всех местах. Та же ошибка undefined index:Password - person Juned Ansari; 20.01.2018
comment
Я думаю, что это должно быть все в нижнем регистре. Класс, в котором происходит ошибка, обращается к паролю следующим образом: return $this->attributes['password'];. - person ; 20.01.2018
comment
Давайте продолжим обсуждение в чате. - person Juned Ansari; 20.01.2018