在做后台管理时,需要判断用户是否登录,是否具备控制器的action操作权限。实现此功能的办法很多中选择,开发过程中会依赖所使用的框架来构造实现逻辑,因此每个程序的框架在代码安排上有不同。本文描述thinkphp6框架下的实现思路,仅供参考。

首先来概括一下思路方法。用户登录后,把账号信息保存session和cookie里。Session保存的信息用作在程序的各个业务环节下获取当前账号信息。Cookie的信息用作,用户关闭浏览器离开站点,再次打开浏览器回到站点,通过读取cookie信息,恢复对应账号信息到session中。两者虽然都保存的是账号的id和密码,功能用途不一样。Cookie的信息可以设置成3天过期或者半个月过期,用户在这个过期时间内,访问站点都能自动登录。处于安全考虑,建议管理后台类的设置10分钟过期。而网站前端类型的可以设置永远不过期,用户打开浏览器即可看到用户名,但是点击进用户中心,需要进行密码验证。这样做即安全又有比较好的用户体验。

Thinkphp6每个控制器 都有__construst()方法,在这个方法里面,先判断session是否存有用户信息,如果没有判断cookie里是否存在,如果也cookie里也没有,那么把访问redirect到登录页面。这样,在每个controller的结构函数里面做判断一下,即可实现用户登录权限限制。这个思路是正确的,但是代码相对来说是冗余一点了。把判断的代码写在一个公用函数里面呢?当然也是可以解决。但这样做,并没有发挥tinkphp6的框架优势。

怎么做呢?采用thinkphp的中间件middleware来实现。在app应用的middleware目录新建一个loginCheck类。

代码如下所示class CheckLogin {

public function handle($request, \Closure $next) {

/**

* 判断是否登陆的中间件

*/

$user = $request->session('loginUser');

if (empty($user)) {

$ck_member = Cookie::get('member', null);

if (!empty($ck_member)) {

$user = json_decode($ck_member, true);

$info = Db::table('users')->where(['id' => $user['id']])->find();

if (!isset($info['username'])

|| ($info['username'] !== $user['username'])

|| ($info['password'] !== $user['password'])) {

return redirect(url('/user/index'));

}

session('loginUser', $info);

} else {

return redirect(url('/user/index'));

}

}

return $next($request);

}

}

采用框架的控制器中间件规则,为需要判断用户登录权限的控制器启用中间件的判断;例如index控制器。class Index extends BaseController

{

public function initialize() {

parent::initialize();

$this->middleware = [

\app\middleware\CheckLogin::class,

];

}

这样,在访问index控制器里任何方法之前,框架会先运行CheckLogin 的handle方法,判断用户登录权限。

好了,本文讲解了如何通过thinkphp6 中间件,控制器启用中间件的办法,判断cookie和seesion 数据,达到判断用户是否登录,相关权限的办法思路。

欢迎大家交流讨论,如何做一个权限控制表。下一个文章一起来实现thinkphp6 结合mysql数据库,把用户操作权限限制在控制器 controller 的每个action 上。

php权限无需验证的控制器,Thinkphp6用中间件实现多个控制器判断用户登录权限相关推荐

  1. Spring MVC拦截器实现用户登录权限验证案例

    本节将通过拦截器来完成一个用户登录权限验证的 Web 应用 springMVCDemo07,具体要求如下:只有成功登录的用户才能访问系统的主页面main.jsp,如果没有成功登录而直接访问主页面,则拦 ...

  2. java springmvc权限校验_springmvc拦截器实现用户登录权限验证

    实现用户登录权限验证 先看一下我的项目的目录,我是在intellij idea 上开发的 1.先创建一个User类 1 package cn.lzc.po; 2 3 public class User ...

  3. java spring登录验证_springMVC 用户登录权限验证实现过程解析

    通过上网搜资料显示,使用filter和interceptor都可以实现.不过推荐使用interceptor. 下面就使用Interceptor实现用户登录权限验证功能. 拦截器需要实现Inceptor ...

  4. Spring Boot 统一功能处理(用户登录权限效验-拦截器、异常处理、数据格式返回)

    文章目录 1. 统一用户登录权限效验 1.1 最初用户登录权限效验 1.2 Spring AOP 统一用户登录验证 1.3 Spring 拦截器 1.4 练习:登录拦截器 1.5 拦截器实现原理 1. ...

  5. 模拟用户登录过程,验证用户名、密码和校验码,如果全部正确提示用户登录成功,否则,提示用户相关输入错误

    要求:模拟用户登录过程,验证用户名.密码和校验码,如果全部正确提示用户登录成功,否则,提示用户相关输入错误. 目的:掌握登录校验的规则和原理. //登录验证 #include<stdio.h&g ...

  6. 实现用户登录权限验证

    先看一下我的项目的目录,我是在intellij idea 上开发的 1.先创建一个User类 1 package cn.lzc.po;2 3 public class User {4 private ...

  7. 网页用户登录权限校验的两种实现方式

        网页登录界面进行登录后,如果不进行登录校验,则在其它页面无法知道该用户是否进行了登录.故需要对用户的登录进行校验,这里将介绍两种登录校验的方式.分别为利用自定义行为过滤器进行登录校验,另外一种 ...

  8. SpringMVC拦截器-用户登录权限控制代码实现1

    判断用户是否登录 本质:判断session中有没有user,如果没有登陆则先去登陆,如果已经登陆则直接放行访问目标资源 先编写拦截器如下: public class PrivilegeIntercep ...

  9. SpringMVC拦截器-用户登录权限控制代码实现2

    在登陆页面输入用户名密码,点击登陆,通过用户名密码进行查询,如果登陆成功,则将用户信息实体存入session,然后跳转到首页,如果登陆失败则继续回到登陆页面 在UserController中编写登陆逻 ...

  10. MySql:从任何主机授予根用户登录权限

    Note that this is Not very secure, and should only be used for a local development box where you don ...

最新文章

  1. Python如何实现穷举搜索?
  2. 子shell中使用相关的环境变量
  3. 微信小程序教学第二章(含视频):小程序中级实战教程之预备篇 - 封装网络请求及 mock 数据...
  4. Javascript中计算脚本运行的时间
  5. Redhat系统下三种主要的软件包安装方法
  6. 通过stream去重_Java 8 Stream.distinct() 列表去重的操作
  7. 为iPhone 12上市做准备,台积电月底前投产A14 Bionic芯片
  8. mysql o_Mysql数据类型
  9. HDU-1002 A + B Problem II Java大数
  10. eclipse的自动检查语法错误功能让我有点烦,能不能关掉,或者,只是10秒检查一次。。...
  11. Ubuntu安装Tensorflow及anaconda环境下使用TensorFlow
  12. Atitit Cookie安全法 目录 1. cookie分为 会话cookie 和 持久cookie , 1 1.1. 安全措施 1 1.2. 3. cookie的同源策略 2 1.3. 安全类库
  13. python 繁体字与简体字互相转换
  14. python正交表结果生成
  15. SpringBoot+Vue 微信支付API V3
  16. 计算机分级时无法度量视频播放,无法度量视频播放性能怎么办-无法度量视频播放性能的解决方法 - 河东软件园...
  17. momentjs 常用总结
  18. android拓展内存卡,都取消存储卡拓展,而它却解决了安卓手机的大问题
  19. STC8单片机OLED通过SPI硬件中断方式驱动——优化
  20. Java程序设计(一)

热门文章

  1. 用glew,glfw实现的opengl 学习笔记2画一个四方形
  2. html页面搜索文章标题,html-文章页面中的H1-网站标题还是文章标题?
  3. oracle中select*的性能与全部字段查询 哪个性能好一点_性能优化技巧:TopN
  4. 龙虎斗 详解(C++)
  5. WebStorm破解---最新 2019.4.24
  6. linux修改文件内容未显示完,LInux下修改 ~/.bashrc 文件source ~/.bashrc 后 shell 命令 失效 任何命令都显示 “ bash XX :未找到命令”...
  7. Centos7安装整合Apache+PHP,安装nginx后nginx无法解析.php文件
  8. php js 获取 客户端ip地址,JavaScript获取客户端IP的方法(新方法)
  9. Nacos初探(2)-- 服务注册原理解析
  10. 基于 libevent 开源框架实现的 web 服务器