Home  >  Article  >  Backend Development  >  yii2 如何处理管理员登陆

yii2 如何处理管理员登陆

WBOY
WBOYOriginal
2016-06-06 20:43:481075browse

提交的数据

<code>$_GET = [
    'r' => 'site/login',
];

$_POST = [
    '_csrf' => 'WjgxM0tfa3YxQn1rcg4vHioLVlt.EjhOAnFVR3MuXgQ7WkNmBwofIg==',
    'LoginForm' => [
        'username' => 'admin',
        'password' => 'admin',
        'rememberMe' => '1',
    ],
    'login-button' => '',
];
</code>

yii2 处理管理员登陆部分的代码:

<code class="lang-php">#/var/www/example.com/public_html/yii/backend/controllers/SiteController.php
    public function actionLogin()
    {
        if (!\Yii::$app->user->isGuest) {
            return $this->goHome();
        }

        $model = new LoginForm();
        if ($model->load(Yii::$app->request->post()) && $model->login()) {
            return $this->goBack();
        } else {
            return $this->render('login', [
                'model' => $model,
            ]);
        }
    }

</code>

但是我并没有user表,这里是backend,管理员登陆部分,对应的表是admin,结构。

<code class="lang-sql"><br>mysql> desc admin;
+-------+------------------+------+-----+---------+-------+
| Field | Type             | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| id    | int(10) unsigned | NO   |     | NULL    |       |
| name  | char(30)         | NO   |     |         |       |
| pwd   | char(32)         | NO   |     |         |       |
| email | char(30)         | NO   |     |         |       |
+-------+------------------+------+-----+---------+-------+
4 rows in set (0.03 sec)

mysql> select * from admin;
+----+---------+----------------------------------+-------+
| id | name    | pwd                              | email |
+----+---------+----------------------------------+-------+
|  1 | admin   | b9840270f7f4ed699ccc93cc09914d21 |       |
+----+---------+----------------------------------+-------+
1 row in set (0.00 sec)

</code>

yii2 他默认的都是user表,可我并没有user表。
我现在提交了用户名和密码,该如何修改actionLogin里面的代码才最合适。

回复内容:

提交的数据

<code>$_GET = [
    'r' => 'site/login',
];

$_POST = [
    '_csrf' => 'WjgxM0tfa3YxQn1rcg4vHioLVlt.EjhOAnFVR3MuXgQ7WkNmBwofIg==',
    'LoginForm' => [
        'username' => 'admin',
        'password' => 'admin',
        'rememberMe' => '1',
    ],
    'login-button' => '',
];
</code>

yii2 处理管理员登陆部分的代码:

<code class="lang-php">#/var/www/example.com/public_html/yii/backend/controllers/SiteController.php
    public function actionLogin()
    {
        if (!\Yii::$app->user->isGuest) {
            return $this->goHome();
        }

        $model = new LoginForm();
        if ($model->load(Yii::$app->request->post()) && $model->login()) {
            return $this->goBack();
        } else {
            return $this->render('login', [
                'model' => $model,
            ]);
        }
    }

</code>

但是我并没有user表,这里是backend,管理员登陆部分,对应的表是admin,结构。

<code class="lang-sql"><br>mysql> desc admin;
+-------+------------------+------+-----+---------+-------+
| Field | Type             | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| id    | int(10) unsigned | NO   |     | NULL    |       |
| name  | char(30)         | NO   |     |         |       |
| pwd   | char(32)         | NO   |     |         |       |
| email | char(30)         | NO   |     |         |       |
+-------+------------------+------+-----+---------+-------+
4 rows in set (0.03 sec)

mysql> select * from admin;
+----+---------+----------------------------------+-------+
| id | name    | pwd                              | email |
+----+---------+----------------------------------+-------+
|  1 | admin   | b9840270f7f4ed699ccc93cc09914d21 |       |
+----+---------+----------------------------------+-------+
1 row in set (0.00 sec)

</code>

yii2 他默认的都是user表,可我并没有user表。
我现在提交了用户名和密码,该如何修改actionLogin里面的代码才最合适。

1 参考高级模板里里的common\models\User 修改 Admin, 并改成目前的密码加密方式.
2 修改 配置文件里的

<code>'user' => [
       //  'identityClass' => 'common\models\User',
        'identityClass' => 'common\models\Admin',
        'enableAutoLogin' => true,
    ],
</code>
  1. 修改LoginForm getUser() 从您的用户表获取用户.

试了一下2.0, 把models/User.php修改成下边这样.

<code class="lang-php"><?php namespace app\models;

//继承关系修改为如下
class User extends \yii\db\ActiveRecord implements \yii\web\IdentityInterface
{
    public $id;
    //username字段修改为name
    public $name;
    //password字段修改为pwd
    public $pwd;
    public $authKey;
    public $accessToken;

    public static function tableName()
    {
        //数据库表名修改user为admin
        return '{{admin}}';
    }

    public static function findIdentity($id)
    {
        return static::findOne($id);
    }

    public static function findIdentityByAccessToken($token)
    {
        return static::findOne(['access_token' => $token]);
    }


    public static function findByUsername($username)
    {
        //username修改为name
        return static::findOne(['name' => $username]);
    }


    public function getId()
    {
        return $this->id;
    }


    public function getAuthKey()
    {
        return $this->authKey;
    }


    public function validateAuthKey($authKey)
    {
        return $this->authKey === $authKey;
    }

    public function validatePassword($password)
    {
        //password修改为pwd
        return $this->pwd === $password;
    }
}

</code>

你应该增加一个UserIdentity 并且修改LoginForm 两者结合才可以不用父类的User表

很简单,添加权限管理,快捷方便。你可以去看官方文档中的rbac的角色管理一章。建议:后台管理员和普通用户放在一块。这样才有高级程序员的范!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn