Yii2 基础模板前后台登录分离

1.用GII 生成一个模块(modules)名字为 admin

2.在./config/web.php 中加入如下配置

    ‘modules‘ => [
        ‘admin‘ => [
                ‘class‘ => ‘app\modules\admin\Module‘,//后台模块
        ]
    ],
    ‘components‘ => [

        ‘user‘ => [
            ‘identityClass‘ => ‘app\models\User‘,
            ‘enableAutoLogin‘ => true,
            ‘loginUrl‘=>[‘/site/login‘],//定义后台默认登录界面[权限不足跳到该页]
            ‘identityCookie‘ => [‘name‘ => ‘__user_identity‘, ‘httpOnly‘ => true],
            ‘idParam‘ => ‘__user‘
        ],

        //前后台登录分离
        ‘admin‘ => [
            ‘class‘ => ‘yii\web\User‘,
            ‘identityClass‘ => ‘app\modules\admin\models\AdminUser‘,
            ‘enableAutoLogin‘ => true,
            ‘loginUrl‘=>[‘/admin/site/login‘],//定义后台默认登录界面[权限不足跳到该页]
            ‘identityCookie‘ => [‘name‘ => ‘__admin_identity‘, ‘httpOnly‘ => true],
            ‘idParam‘ => ‘__admin‘
        ],
]
3.把 app\controllers\SiteController.php 控制器复制到 app\modules\admin\controllers\SiteController.php 并修改其中的登录和退出动作,其他动作不动。如下:
    public function actionLogin()
    {
        if (!\Yii::$app->admin->isGuest) {
            //return $this->goHome();
            return $this->redirect([‘/admin/site/index‘]);
        }

        $model = new LoginForm();
        if ($model->load(Yii::$app->request->post()) && $model->login()) {
            //return $this->goBack();
            return $this->redirect([‘/admin/site/index‘]);
        }
        return $this->render(‘login‘, [
            ‘model‘ => $model,
        ]);
    }

    public function actionSignout()
    {
        /*
        Yii::$app->user->logout();

        return $this->goHome();
        */
        //Yii::$app->user->logout(false);
        Yii::$app->admin->logout();
        //return $this->goHome();
        return $this->redirect([‘/admin/site/login‘]);
    }
4.把 app\models\User.php 复制到 app\modules\admin\models\目录下

5.把 app\models\LoginForm.php 复制到 app\modules\admin\models\LoginForm.php目录下,并修改内容,如下:
<?php

namespace app\modules\admin\models;

use Yii;
use yii\base\Model;
use app\modules\admin\models\AdminUser;

/**
 * LoginForm is the model behind the login form.
 */
class LoginForm extends Model
{
    public $username;
    public $password;
    public $rememberMe = true;

    private $_user = false;

    /**
     * @return array the validation rules.
     */
    public function rules()
    {
        return [
            // username and password are both required
            [[‘username‘, ‘password‘], ‘required‘],
            // rememberMe must be a boolean value
            [‘rememberMe‘, ‘boolean‘],
            // password is validated by validatePassword()
            [‘password‘, ‘validatePassword‘],
        ];
    }

    /**
     * Validates the password.
     * This method serves as the inline validation for password.
     *
     * @param string $attribute the attribute currently being validated
     * @param array $params the additional name-value pairs given in the rule
     */
    public function validatePassword($attribute, $params)
    {
        if (!$this->hasErrors()) {
            $user = $this->getUser();

            if (!$user || !$user->validatePassword($this->password)) {
                $this->addError($attribute, ‘Incorrect username or password.‘);
            }
        }
    }

    /**
     * Logs in a user using the provided username and password.
     * @return boolean whether the user is logged in successfully
     */
    public function login()
    {
        if ($this->validate()) {
            return Yii::$app->admin->login($this->getUser(), $this->rememberMe ? 3600*24*30 : 0);
        }
        return false;
    }

    /**
     * Finds user by [[username]]
     *
     * @return User|null
     */
    public function getUser()
    {
        if ($this->_user === false) {
            $this->_user = AdminUser::findByUsername($this->username);
        }

        return $this->_user;
    }
}
至此后前台的登录就分离了,前台的登录系统有自带的,这里就不说了

前台登录地址:localhost/index.php?r=site/login前台退出地址:localhost/index.php?r=site/logout

后台登录地址:localhost/index.php?r=admin/site/login后台退出地址:localhost/index.php?r=admin/site/singout

 关键的 6 个方法是

 1.后台判断是否登录 Yii::$app->admin->isGuest

 2.后台登录 Yii::$app->admin->login($this->getUser(), $this->rememberMe ? 3600*24*30 : 0);

 3.后台退出 Yii::$app->admin->logout();

 4.前台判断是否登录 Yii::$app->user->isGuest

 5.前台登录 Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600*24*30 : 0);

 6.前台退出 Yii::$app->user->logout();

				
时间: 2024-11-03 20:52:15

Yii2 基础模板前后台登录分离的相关文章

Yii2 高级模板不使用Apache配置目录,将前后台入口移到根目录

刚刚入手Yii2高级模板不久,部署项目时,得部署2个应用,个人感觉很繁琐,就将前后台入口文件全部拿到项目根目录.但是一看,完了,出错了!找教程找不到,还是自己解决吧 为了以后好升级,不改变Yii2核心文件,只需改2个文件就可以 将Vendor/yiisoft/yii2/web/AssetManger.php文件的69行 public $basePath = '@webroot/assets'; 改为 public $basePath = '@webroot/frontend/web/assets

【转】手摸手,带你用vue撸后台 系列四(vueAdmin 一个极简的后台基础模板)

前言 做这个 vueAdmin-template 的主要原因是: vue-element-admin 这个项目的初衷是一个vue的管理后台集成方案,把平时用到的一些组件或者经验分享给大家,同时它也在不断的维护和拓展中,比如最近重构了dashboard,加入了全屏功能,新增了tabs-view等等.所以项目会越来越复杂,不太适合很多初用vue的同学来构建后台.所以就写了这个基础模板,它没有复杂的功能,只包含了一个后台需要最基础的东西.vueAdmin-template 主要是基于vue-cli w

Yii中处理前后台登录

如果有前台会员登陆和后台管理员登陆分离的需求,则需要为前台和后台的登陆定制两套不同的验证机制,主要是通过定义不同的Session来实现.要解决这个问题就要将前后台使用不同的Cwebuser实例登录.这样就已经做到了前后台登录分离开了,但是此时你退出的话你就会发现前后台一起退出了.于是我找到了logout()这个方法,发现他有一个参数$destroySession=true,原来如此,如果你只是logout()的话那就会将session全部注销,加一个false参数的话就只会注销当前登录实例的se

面向对象-基础实现用户登录验证

使用初始化参数的方法输入用户名密码实现基础的用户登录功能. 实现一:基本功能实现 public class Test3 { public static void main(String[] args) { if(args.length != 2){ System.out.println("您输入的参数不合法"); System.out.println("格式为:admin 123 用户名 密码"); System.exit(1); } String name = a

UVA11178 Morley&#39;s Theorem(基础模板)

题目链接 题意:给出A,B, C点坐标求D,E,F坐标,其中每个角都被均等分成三份   求出 ABC的角a, 由 BC 逆时针旋转 a/3 得到BD,然后 求出 ACB 的角a2, 然后 由 BC顺时针 旋转 a2 / 3得到 DC,然后就交点 1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cstring> 5 #include <cmath&g

树状数组(二叉索引树 BIT Fenwick树) *【一维基础模板】(查询区间和+修改更新)

刘汝佳:<训练指南>Page(194) #include <stdio.h> #include <string.h> #include <stdlib.h> #include <algorithm> using namespace std; //一维树状数组基础模板 int lowbit(int x) { return x&(-x); } int c[1001]; int sum(int x) //计算从1到x的数组元素的和 { int

Bootstrap 4/3 页面基础模板 与 兼容旧版本浏览器

Bootstrap 3 与 4 差别很大,目录文件结构.所引入的内容也不同,这里说说一下 Bootstrap 引入的文件.网页模板和兼容性问题.本网站刚刚搭建好,正好发一下文章原来测试网站. Bootstrap 4 目录结构如下 bootstrap/ ├── css/ │ ├── bootstrap.css │ ├── bootstrap.css.map │ ├── bootstrap.min.css │ ├── bootstrap.min.css.map │ ├── bootstrap-gri

vue-cli3 搭建的前端项目基础模板

基于 vue-cli3 搭建的前端模板,fork 或 clone 本仓库,即可搭建完成一个新项目的基础模板,源码地址,欢迎 star 或 fork 特性 CSS 预编译语言:less Ajax: axios,做了一定的封装,详见 src/services/request.js SVG 雪碧图:采用 webpack 插件 svg-sprite-loader,及 svg 精简压缩工具 svgo 移动 web 的适配方案:引入了 postcss-pxtorem 及 lib-flexible,可以自由地

项目案例模板之登录注册的实现

项目案例模板之登录注册的实现 案例演示 案例代码 设计表 pom.xml  <dependencies>  <dependency>    <groupId>junit</groupId>    <artifactId>junit</artifactId>    <version>4.11</version>    <scope>test</scope>  </dependency