• Yii2 前后台登陆退出分离、登陆验证


    这里用的yii2高级模板, 基本模板的配置文件在一个文件里,方法基本没什么区别,

    1.用户表
    要有两个用户表, 当然一个也行,分开是省得麻烦,既然是分离了就彻底分开, 前台表user,后台表user_backend,表结构这里不再说明了,只列出字段

    id username auth_key password_hash password_reset_token email status created_at updated_at


    2.配置文件
    分别将frontend/config/main.php和backend/config/main.php里增加如下代码中user部分内容,注意放在配置文件components参数之内,有user部分的修改即可
    要特别注意下 identityCookie和 idParam 参数, 前后台要不一样

    //前台配置项
    return [
        'id' => 'app-frontend',
        'basePath' => dirname(__DIR__),
        .......省略代码
        'components' => [
            'user' => [
                'identityClass' => 'frontendmodelsUser', //前台用户验证类
                'enableAutoLogin' => true,
                'identityCookie' => ['name' => '_identity-frontend', 'httpOnly' => true],
                'loginUrl' => ['site/login'],
                'idParam' => '__user',
            ],
            .......省略代码
        ],
    
    //后台配置项
    'user' => [
        'identityClass' => 'backendmodelsUserBackend', //后台用户验证类
        'enableAutoLogin' => true,
        'identityCookie' => ['name' => '_identity-backend', 'httpOnly' => true],
        'loginUrl' => ['site/login'],
        'idParam' => '__admin',
    ],


    3.控制器登陆退出
    这里只列出前台控制器代码,后台是一样的,

    //登陆
    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,
            ]);
        }
    }
    //退出
    public function actionLogout() {
        Yii::$app->user->logout();
        return $this->goHome();
    }


    4.模型Model
    同样只列出前台部分,后台基本相同, 如下代码getUser()中User::findByUsername使用的为frontendmodelsUser类的方法, 此类直接使用commonmodelsUser改命名空间即可,

    class LoginForm extends Model {
        ....省略代码
        public function login() {
            $user = $this->getUser();
            if($this->validate()) {
                return Yii::$app->user->login($user, $this->rememberMe ? 3600 * 24 * 30 : 0);
            } else {
                return false;
            }
        }
    
        protected function getUser() {
            if ($this->_user === null) {
                $this->_user = User::findByUsername($this->username);
            }
            return $this->_user;
        }
        ....省略代码
    }

    注意 modelsUser表名部分, 前台使用的是user 后台使用的是user_backend

    public static function tableName() {
        return '`i_user`'; //后台为user_backend
    }

  • 相关阅读:
    第7章 类
    windows查询端口占用以及kill
    判断电脑的系统,以及windows是否是XP
    Promise.all 出现异常时候处理
    [Vue warn]: Failed to mount component: template or render function not defined.
    电脑缺少配置 输入命令解决
    Vue packages version mismatch
    数组里 对象去重
    hexo 创建博客
    查看端口占用,并结束占用端口
  • 原文地址:https://www.cnblogs.com/whowhere/p/7782698.html
Copyright © 2020-2023  润新知