登录访问在yii2中不起作用

登录访问在yii2中不起作用,yii2,Yii2,我在我的项目中使用yii2。我需要使用两个不同的表登录(登录页面是相同的)。我有两种型号Admin和User。我有一个登录名,来自 我可以正确登录,但问题是登录后,我无法获取管理员是否登录或用户是否登录 我在配置文件(web.php)中对其进行了如下设置: 'admin' => [ 'identityClass' => 'app\models\Admin', 'enableAutoLogin' => false, 'class'

我在我的项目中使用yii2。我需要使用两个不同的表登录(登录页面是相同的)。我有两种型号AdminUser。我有一个登录名,来自

我可以正确登录,但问题是登录后,我无法获取管理员是否登录或用户是否登录

我在配置文件(web.php)中对其进行了如下设置:

'admin' => [
        'identityClass' => 'app\models\Admin',
        'enableAutoLogin' => false,
        'class' => 'yii\web\User',
        'authTimeout' => 1200, // in Seconds. 1200 seconds means 20 mins
    ],
'user' => [
        'identityClass' => 'app\models\User',
        'enableAutoLogin' => false,
        'authTimeout' => 1200
    ],
因此,我使用以下方法登录用户详细信息:

\Yii::$app->admin->identity;
\Yii::$app->user->identity;
我的问题是,如果我以管理员身份登录,我也可以通过以下方式获取用户值:\Yii::$app->user->identity或者如果我以用户身份登录,我可以使用以下命令获取管理员值:\Yii::$app->admin->identity

我的LoginForm.php是:

<?php
 namespace app\models;

 use Yii;
 use yii\base\Model;

 class LoginForm extends Model
 {
   public $username;
   public $password;
   public $rememberMe = true;

   private $_user = false;

   public function rules()
   {
      return [
        // username and password are both required
        [['username', 'password'], 'required'],
        // rememberMe must be a boolean value
        ['rememberMe', 'boolean'],
        // password is validated by validatePassword()
        ['password', 'validatePassword'],
      ];
    }

    public function validatePassword($attribute, $params)
    {
       if (!$this->hasErrors()) {
          $user = $this->getUser();

          if (!$user || !$user->validatePassword($this->password)) {
              $this->addError($attribute, 'Incorrect username or password.');
          }
       }
     }

     public function login()
     {
         if ($this->validate()) {
            if(!empty($this->getUser()['phone_number'])) {
                return Yii::$app->admin->login($this->getUser(), $this->rememberMe ? 3600*24*30 : 0);
            } else {
                return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600*24*30 : 0);
            }
         }
         return false;
      }

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

            if(!$this->_user) {
                $this->_user = Admin::findByUsername($this->username);
             }
          }

          return $this->_user;
       }
    }

通过阅读注释,我认为您应该为两个身份创建一个统一的表,这两个身份都是从中获取ID的。然后将其设为identity类。您能够在两个标识类中看到详细信息的原因是它们具有相同的ID。

为什么需要两个标识?为什么不使用RBAC并定义角色管理员?我同意@Aivar这里你应该使用RBAC和定义角色,而不是创建两个单独的标识或表。我必须使用两个表,这就是@Aivar无法在yii2中使用两个表登录的原因:(问题是我不应该更改我的表结构