Вход из разных баз данных Yii2 - PullRequest
1 голос
/ 07 апреля 2020

Я хочу использовать две таблицы из разных баз данных для функции входа в Yii2 basi c app.

В окне входа в систему я добавляю новое поле:

<?= $form->field($model, 'username') ?>

<?= $form->field($model, 'password')->passwordInput() ?>

<?= $form->field($model, 'choice') ?>

В LoginForm, я изменяю это:

public function getUser() {
    if ($this->_user === false && $this->choice == 1) {            
        $this->_user = User::findByUsername($this->username);
    }

    else if ($this->_user === false && $this->choice == 2) {
        $this->_user = UserPerusahaan::findByUsername($this->username);
    }

    return $this->_user;
}

Пользователь. php имеет это:

public static function getDb() {
    return \Yii::$app->dblogin;  // use the "db2" application component
}

public static function tableName() {
    return 'pengguna';
}

Что отличает UserPerusahaan. php от пользователя. php это :

/*public static function getDb() {
    return \Yii::$app->dblogin; 
}*/

public static function tableName() {
    return 'perusahaan';
}

Когда я пытаюсь войти, он просто обновляет страницу входа. Что мне здесь не хватает? Или есть другой лучший практический подход?

РЕДАКТИРОВАТЬ:

Я пытался добавить это к компонентам в Интернете. php:

'user' => [
        'class' => 'yii\web\User',
        'identityClass' => 'app\models\User',
        'enableAutoLogin' => true,
],
'userperusahaan' => [
        'class' => 'yii\web\User',
        'identityClass' => 'app\models\UserPerusahaan',
        'enableAutoLogin' => true,
 ],

И это для LoginForm. php:

public function login() {
    if ($this->validate()&& $this->choice == 1) {
        return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600 * 24 * 30 : 0);
    }
    else if ($this->validate()&& $this->choice == 2) {
        return Yii::$app->userperusahaan->login($this->getUser(), $this->rememberMe ? 3600 * 24 * 30 : 0);
    }
    return false;
}

Вход в систему с использованием $ choice = 1 работает, но использование $ choice = 2 по-прежнему дает мне обновленную страницу входа.

1 Ответ

0 голосов
/ 08 апреля 2020

Если вы используете этот сценарий, избегайте использования ролей "@" в accessControl. Роли "@" применяются только к Yii :: $ app-> user, поэтому, если вы войдете в систему с другим компонентом (например, Yii :: $ app-> userPerusahaan-> login ()), он не будет считаться зарегистрированным пользователем с ролями " @». Модифицировал свой siteController, как в этом примере.

public function behaviors()
{
    return [
        'access' => [
            'class' => AccessControl::className(),
            'rules' => [
                [
                    'actions' => ['index', 'login'],
                    'allow' => true,
                    'roles' => ['?'],
                ],
                [
                    'actions' => ['logout'],
                    'allow' => true,
                    'roles' => ['@'],
                ],
            ],
        ],
        'verbs' => [
            'class' => VerbFilter::className(),
            'actions' => [
                'logout' => ['post'],
            ],
        ],
    ];
}

public function actionIndex()
{
    if(Yii::$app->user->isGuest && Yii::$app->userPerusahaan->isGuest) return $this->redirect(['login']);
    //  ......
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...