欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

yii2 如何处理管理员登陆

程序员文章站 2022-06-09 09:50:04
...
提交的数据
$_GET = [
    'r' => 'site/login',
];

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

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

#/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,
            ]);
        }
    }

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


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)

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

回复内容:

提交的数据

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

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

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

#/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,
            ]);
        }
    }

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


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)

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

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

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

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

 $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;
    }
}

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

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