php - yii2 如何处理管理员登陆

 郑小蒜9299_941611_G 发布于 2022-11-23 08:08

提交的数据

$_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里面的代码才最合适。

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

    2022-11-23 09:23 回答
  • 你应该增加一个UserIdentity 并且修改LoginForm 两者结合才可以不用父类的User表

    2022-11-23 09:23 回答
  • 试了一下2.0, 把models/User.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;
        }
    }
    
    
    2022-11-23 09:23 回答
  • 1 参考高级模板里里的common\models\User 修改 Admin, 并改成目前的密码加密方式.
    2 修改 配置文件里的

    'user' => [
           //  'identityClass' => 'common\models\User',
            'identityClass' => 'common\models\Admin',
            'enableAutoLogin' => true,
        ],
    
    1. 修改LoginForm getUser() 从您的用户表获取用户.
    2022-11-23 09:23 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有