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是一个很易用的分布式编程框架,经过良好封装屏蔽了很多分布式环境下的复杂问题,因此,对普通 ...
随机推荐
- 9.18考试 第一题count题解
这道题说起来挺可惜的,当时纠结是用常数大但有可能减少递归层数的模还是用常数小但递归多的回溯纠结了好半天,最终错误的选择了模.导致T了20分,改成回溯就A了. 先分析一下性质,我在考试的时候打表发现在数 ...
- 0x31 prime distance(质数)
题目描述: 给定两个整数L和U,你需要在闭区间[L,U]内找到距离最接近的两个相邻质数C1和C2(即C2-C1是最小的),如果存在相同距离的其他相邻质数对,则输出第一对. 同时,你还需要找到距离最远的 ...
- 【基本数据结构之堆】-C++
注意:这篇博客讲的是手写堆,喜欢用C++自带数据结构模拟的慎入 今天我们来聊一聊一种奇怪 的数据结构: 堆 为什么说这个数据结构有点奇怪呢? 先看看其他的在我眼里是正常的数据结构: 队列(近似于排队) ...
- Cocos2d-x 3.x 学习笔记(三):Scheduler Timer 调度与定时
1. 概述 Cocos2d-x 的 Scheduler 离不开 Timer.Timer 类是定时器,用来规定一个回调函数应该在何时被触发.Timer 封装了已运行时间.重复次数.已执行次数.延迟秒数 ...
- 浅谈MQTT
一.什么是MQTT MQTT的全称是“ Message Queuing Telemetry Transport”,即消息队列遥测传输,是一种基于订阅/发布模式的应用层协议,而http是一种基于rest ...
- http面试笔试常考知识点(一)
1.什么是http HTTP是客户端和服务器端请求和应答的标准.通过使用Web浏览器.网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求.(我们称这个客户端)叫用 ...
- 《VR入门系列教程》之10---3D图形学初识
第三章 基于Oculus Rift开发桌面端VR应用 接下来的几个章节中我们会进行VR开发的实际操练,本章就从Oculus Rift开发开始,我们会介绍如何开发一个桌面端的VR应用.虽然只是介 ...
- cookbook_模块和包
1把模块按层次结构组织成包 只需确保每个目录中都定义了__init__.py即可. 2对所有符号的导入进行精确控制 当用户使用from module import * 语句时,我们希望对从模块或包中导 ...
- 最近很火的MySQL:抛开复杂的架构设计,MySQL优化思想基本都在这
优化一览图 优化 笔者将优化分为了两大类:软优化和硬优化.软优化一般是操作数据库即可:而硬优化则是操作服务器硬件及参数设置. 1.软优化 1)查询语句优化 首先我们可以用EXPLAIN或DESCRIB ...
- RocketMQ中Producer的启动源码分析
RocketMQ中通过DefaultMQProducer创建Producer DefaultMQProducer定义如下: public class DefaultMQProducer extends ...