首页 > 解决方案 > 登录访问在yii2中不起作用

问题描述

我在我的项目中使用 yii2。我需要使用两个不同的表进行登录(登录页面相同)。我有两个模型AdminUser。我有一个LoginFrom用于登录。

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

我已将其设置在配置文件(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;
       }
    }

我找不到问题,如果我为两个用户都登录了身份创建,所以我无法在特定控制器中编写访问规则以仅允许管理员访问控制器。请帮助我:(

标签: yii2

解决方案


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


推荐阅读