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 并修改其中的登录和退出动作。
SiteController.php的命名空间改为 namespace app\modules\admin\controllers;
把 use app\models\LoginForm; 改为 use app\modules\admin\models\LoginForm;
把 use app\models\ContactForm; 改为 use app\modules\admin\models\ContactForm;
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;
}
}
6.把 views\site文件夹复制到 admin\views\ 中
在 admin\view\index.php中加入
<?=Yii::$app->admin->isGuest ? Html::a('Login',['/admin/site/login']) : Html::a('logout('.Yii::$app->admin->identity->username.')',['/admin/site/signout'])?>
这样后台就有显示登录及退出连接 至此后前台的登录就分离了,前台的登录系统有自带的,这里就不说了 前台登录地址: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();
Yii2 基础模板前后台登录分离的更多相关文章
- Yii中处理前后台登录新方法
我一开始的做法是在后台登录时设置一个isadmin的session,然后再前台登录时注销这个session,这样做只能辨别是前台登录还是后台登录,但做不到前后台一起登录,也即前台登录了后台就退出了,后 ...
- Laravel 实现前后台用户分离登录
在很多时候,我们需要前台和后台进行不同的登录操作,以限制用户权限,现在用 Laravel 实现这个需求. 前戏 一.获取 Laravel 这个在文档中都有说明的,也比较简单,可以使用 composer ...
- Yii2 高级模板不使用Apache配置目录,将前后台入口移到根目录
刚刚入手Yii2高级模板不久,部署项目时,得部署2个应用,个人感觉很繁琐,就将前后台入口文件全部拿到项目根目录.但是一看,完了,出错了!找教程找不到,还是自己解决吧 为了以后好升级,不改变Yii2核心 ...
- 前后台彻底分离的核心文件bridge.js.
具体代码可以在我的git上下载:https://github.com/guoyansi/bridge 这里的后台使用java写的,如果不了解java的童鞋可以忽略下面这样图片. bridge.js / ...
- 【转】手摸手,带你用vue撸后台 系列四(vueAdmin 一个极简的后台基础模板)
前言 做这个 vueAdmin-template 的主要原因是: vue-element-admin 这个项目的初衷是一个vue的管理后台集成方案,把平时用到的一些组件或者经验分享给大家,同时它也在不 ...
- Dubbo入门到精通学习笔记(二十):MyCat在MySQL主从复制的基础上实现读写分离、MyCat 集群部署(HAProxy + MyCat)、MyCat 高可用负载均衡集群Keepalived
文章目录 MyCat在MySQL主从复制的基础上实现读写分离 一.环境 二.依赖课程 三.MyCat 介绍 ( MyCat 官网:http://mycat.org.cn/ ) 四.MyCat 的安装 ...
- new 经典基础模板总结
NOIP-NOI-ZJOI基础模板总结 目录 C++语言和STL库操作 重载运算符操作 /* 重载运算符 格式 如重载小于号 这里是以x递减为第一关键字比较,y递减为第二关键字比较 */ bool o ...
- Bootstrap 4/3 页面基础模板 与 兼容旧版本浏览器
Bootstrap 3 与 4 差别很大,目录文件结构.所引入的内容也不同,这里说说一下 Bootstrap 引入的文件.网页模板和兼容性问题.本网站刚刚搭建好,正好发一下文章原来测试网站. Boot ...
- Hadoop程序基础模板
分布式编程相对复杂,而Hadoop本身蒙上大数据.云计算等各种面纱,让很多初学者望而却步.可事实上,Hadoop是一个很易用的分布式编程框架,经过良好封装屏蔽了很多分布式环境下的复杂问题,因此,对普通 ...
随机推荐
- 8086 IO读写操作
如图所示,通过8086来读写io口,实现流水灯以及开关.本电路是基于8086最小模式下的三总线结构添加的,三总线结构原理较为复杂本篇就不对其原理进行介绍了,大家可以自行查阅相关引脚的功能从而实现. 本 ...
- 一文了解有趣的位运算(&、|、^、~、>>、<<)
1.位运算概述 从现代计算机中所有的数据二进制的形式存储在设备中.即0.1两种状态,计算机对二进制数据进行的运算(+.-.*./)都是叫位运算,即将符号位共同参与运算的运算. 口说无凭,举一个简单的例 ...
- java - 多态实现机制
Java提供了编译时多态和运行时多态两种多态机制.前者是通过方法重载实现的,后者是通过方法的覆盖实现的. 在方法覆盖中,子类可以覆盖父类的方法,因此同类的方法会在父类与子类中有着不同的表现形式. 在J ...
- http的无状态
无状态协议是指协议对务处理没有记忆能力.缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大.另一方面,在服务器不需要先前信息时它的应答就较快. Http协议不 ...
- 05-k8s调度器、预选策略、优选函数
目录 k8s调度器.预选策略.优选函数 节点选择过程 调度器 预选策略 优选函数 高级调度设置机制 node选择器/node亲和调度 pod亲和性 污点调度 Taints 与 Tolerations ...
- git基础学习
1.git是什么 内容寻址文件系统,分布式版本控制系统 2.git作用 开发过程中的版本控制 3.git基础命令 克隆git仓库---clone:git clone 仓库url 选分支---check ...
- Java 之MVC动态分页完美实现
一个分页小技术有时也是让人挠头,在这里完全前端实现方式与Java的实现方式,我们提供给你完全的编码参考,希望能够帮到你哦(:) 内容导读 1.程序结构 2.JSP页面设计 3.分页主要编码 4.运行效 ...
- memcached.c 源码分析
上文分析了memcached的autoconf过程以及configure, make过程,可以看到,memcached可执行文件是由memcached-memcached.o以及其他文件连接后编译出来 ...
- mysql 学习第一天
RDBMS 术语 在我们开始学习MySQL 数据库前,让我们先了解下RDBMS的一些术语: 数据库: 数据库是一些关联表的集合. 数据表: 表是数据的矩阵.在一个数据库中的表看起来像一个简单的电子表格 ...
- java8中用流收集数据
用流收集数据 汇总 long howManyDishes = menu.stream().collect(Collectors.counting()); int totalCalories = men ...