Maison  >  Article  >  développement back-end  >  yii2 如何处理管理员登陆

yii2 如何处理管理员登陆

WBOY
WBOYoriginal
2016-06-06 20:43:481077parcourir

提交的数据

<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的角色管理一章。建议:后台管理员和普通用户放在一块。这样才有高级程序员的范!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:请教一个公交换乘算法Article suivant:第三方接入的实现