Thinkphp5所有页面验证用户是否登陆
新建Base.php控制器,所有的页面继承自它
<?php
namespace app\index\controller;
use think\Controller;
class Base extends Controller
{
public function __construct(){
/**
* 不验证用户登陆的页面
*/
//不验证用户登陆的页面
$exception_arth_list=[
'member/users/login', //登陆页面
'member/users/reg' //注册页面
];
$redirect_url='member/users/login';
$this->checkUserLogin($redirect_url,$exception_arth_list);
}
/**
* 检查用户是否登陆,登陆时跳转到登陆页面
* $redirect_url 要跳的url (不区别大小写) [str] 例: 'member/Users/login'
* $exception_arth_list [array] 不验证用户登陆的页面地址(不区别大小写) 例: ['member/user/login','member/Users/reg']
* $msg 跳转前的提示信息
*/
protected function checkUserLogin($redirect_url,$exception_arth_list=[],$msg='')
{
if(!is_string($redirect_url) || !is_array($exception_arth_list) || !is_string($msg) ){
die('传入的参数错误.');
}
//获取到当前访问的页面
$module=request()->module();//获取当前访问的模块
$controller=request()->controller();//获取当前访问的控制器
$action= request()->action();//获取当前访问的方法
$current_auth_str=$module.'/'.$controller.'/'.$action; //转成字符串
//不验证用户登陆的页面
//把数组里的全部转小写
if(!empty($exception_arth_list) && is_array($exception_arth_list)){
foreach($exception_arth_list as &$v){
if(!is_string($v)){
die('不验证页面数组里的值只能为字符串类型.');
}
$v=strtolower($v);
}
}
//当前访问的页面$current_auth_str转为全小写后,如果不在$exception_arth_list客户中就验证用户是否登陆
if(!empty($exception_arth_list) && is_array($exception_arth_list)){
if(!in_array(strtolower($current_auth_str),$exception_arth_list)){
if (!session('user_id')) {
if($msg == ''){
$this->redirect($redirect_url);
}else{
$this->error('请先登陆.', $redirect_url);
}
}
}
}
}
}
[Haima的博客]
http://www.cnblogs.com/haima/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律