我想使用来自不同数据库的两个表进行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仍使我刷新了登录页面。
如果使用该方案,请避免在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']);
// ......