从其他数据库登录Yii2

问题描述 投票:1回答:1

我想使用来自不同数据库的两个表进行Yii2基本应用程序的登录功能。

在登录视图中,我添加一个新字段:

<?= $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;
}

User.php具有此:

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

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

使UserPerusahaan.php与User.php不同的原因是:

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

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

[当我尝试登录时,只会刷新登录页面。我在这里想念什么?还是还有另一种更好的实用方法?

编辑:

我尝试将其添加到web.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仍使我刷新了登录页面。

php database authentication yii2
1个回答
0
投票

如果使用该方案,请避免在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']);
    //  ......
© www.soinside.com 2019 - 2024. All rights reserved.