在上篇文章中说到用模型获取用户信息,判断是否登录场景,接下来本节主要讲用base控制器,判断用户是否登录,逻辑如下:
未登录:用户----->登陆界面
已登陆: 用户---->首页登录状态
首先我们需要去创建base控制器取名为UserBaseController.php
代码如下
namspace app\admin\controller;
use think\BaseController;
class UserBaseController exetends {
//定义全局属性
public $adminUser = null
public function initialize()
{
//继承父类的initialize方法
parent::initialize();
//判断用户是否登录
if(empty(isLogin()))
{ //如果isLogin下的session为空,那么就返回login页面
return $this->redirect(url("login/index"))
}
}
public function isLogin()
{
//上节中login下的session
//获取session内容
$this->adminUser = session(config("admin.session_admin"));
//判断session内容是否为空
//null返回false,不是则返回true
if(empty($this->adminUser)){
return false;
}
return true
}
//传入动态参数$args
public function redirect(...$args){
throw new HttpResponesException(redirect(...$args));
}
}
注意: 在controller下涉及到登录的都需要继承UserBaseController,否则可能就会有问题
在Login.php中需要重写重定向否则就会进入死循环
Login.php(片段代码)
.........
class Login exetends UserBaseController {
//新建initialize方法
//重写重定向
public function initialize()
{
//判断用户是否登录
if($this->isLogin()){
//返回到首页内容
retrun $this->redirect(url("index/index"));
}
}
}
.........
退出功能我们则是要销毁session中的内容
同样我们也仍然需要继承UserBaseController控制器
controller/Logout.php
namspace app\admin\controller;
class Logout exetends UserBaseController
{
public function index(){
//销毁session
session(config("admin.session_admin"),null);
//销毁session后跳转到登录界面
return redirect(url("login/index"))
}
}
当查询打印session为null就说明已经销毁session内容了
就是这样登录的完整逻辑已经完成,
容易出现的问题如下:
1.重定向进入死循环,这时候我们需要用浏览器去排查是哪边出问题;
2.session没有初始话,无法判断session内容,一直是为null;
3.session读取的会话id可能不对;
等等问题,基本上通过浏览器就可以排查出问题所在!
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。