如果多模块的话,需要建立对应的用户表、用户分组表、用户权限表
/* Navicat MySQL Data Transfer Source Server : real-think Source Server Version : 50734 Source Host : 8.136.216.46:3306 Source Database : real-think Target Server Type : MYSQL Target Server Version : 50734 File Encoding : 65001 Date: 2021-10-17 15:18:39 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for jm_admin -- ---------------------------- DROP TABLE IF EXISTS `jm_admin`; CREATE TABLE `jm_admin` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', `group_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '组别ID', `username` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '用户名', `nickname` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '昵称', `password` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '密码', `salt` varchar(30) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '密码盐', `email` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '电子邮箱', `mobile` varchar(11) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '手机号', `avatar` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '头像', `level` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '等级', `gender` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '性别:0=女,1=男', `birthday` date DEFAULT NULL COMMENT '生日', `bio` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '格言', `money` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '余额', `score` int(10) NOT NULL DEFAULT '0' COMMENT '积分', `successions` int(10) unsigned NOT NULL DEFAULT '1' COMMENT '连续登录天数', `maxsuccessions` int(10) unsigned NOT NULL DEFAULT '1' COMMENT '最大连续登录天数', `prevtime` int(10) DEFAULT NULL COMMENT '上次登录时间', `logintime` int(10) DEFAULT NULL COMMENT '登录时间', `loginip` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '登录IP', `loginfailure` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '失败次数', `joinip` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '加入IP', `jointime` int(10) DEFAULT NULL COMMENT '加入时间', `createtime` int(10) DEFAULT NULL COMMENT '创建时间', `updatetime` int(10) DEFAULT NULL COMMENT '更新时间', `token` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'Token', `status` varchar(30) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '状态', `verification` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '验证', PRIMARY KEY (`id`), KEY `username` (`username`), KEY `email` (`email`), KEY `mobile` (`mobile`) ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会员表'; -- ---------------------------- -- Table structure for jm_admin_group -- ---------------------------- DROP TABLE IF EXISTS `jm_admin_group`; CREATE TABLE `jm_admin_group` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '组名', `rules` text COLLATE utf8mb4_unicode_ci COMMENT '权限节点', `createtime` int(10) DEFAULT NULL COMMENT '添加时间', `updatetime` int(10) DEFAULT NULL COMMENT '更新时间', `status` enum('normal','hidden') COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '状态', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会员组表'; -- ---------------------------- -- Table structure for jm_admin_rule -- ---------------------------- DROP TABLE IF EXISTS `jm_admin_rule`; CREATE TABLE `jm_admin_rule` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `pid` int(10) DEFAULT NULL COMMENT '父ID', `name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '名称', `title` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '标题', `remark` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', `ismenu` tinyint(1) DEFAULT NULL COMMENT '是否菜单', `createtime` int(10) DEFAULT NULL COMMENT '创建时间', `updatetime` int(10) DEFAULT NULL COMMENT '更新时间', `weigh` int(10) DEFAULT '0' COMMENT '权重', `status` enum('normal','hidden') COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '状态', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会员规则表'; -- ---------------------------- -- Table structure for jm_admin_token -- ---------------------------- DROP TABLE IF EXISTS `jm_admin_token`; CREATE TABLE `jm_admin_token` ( `token` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Token', `user_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '会员ID', `createtime` int(10) DEFAULT NULL COMMENT '创建时间', `expiretime` int(10) DEFAULT NULL COMMENT '过期时间', PRIMARY KEY (`token`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会员Token表';
下载到tp6的extend\jmwl下
use jmwl\realjwt\Token; use jmwl\realjwt\Auth;
$init= [ // 驱动方式 'type' => 'Mysql', 'table' =>"admin_token",//如果是Mysql使用的存储token的表名 'userprefix'=>"up:",//如果是Redis使用的存储用户名前缀 'tokenprefix'=>"tp:",//如果是Redis使用的存储token前缀 // 缓存前缀 'key' => '30tvUyXl8NkOx7YKDAoLu5FQRIGTh4qa', // 加密方式 'hashalgo' => 'ripemd160', // 缓存有效期 0表示永久缓存 'expire' => 0, ]; $usertable="admin";//用户表名,自动对应用户分组表、用户权限表 如用户表名:admin,那么用户分组名:admin_group,用户权限表:admin_rule
这里基本不会用到,主要用的是auth类
/** Token::init($init); //判断Token是否可用 Token::check($token, $user_id); //获取Token内的信息 Token::get($token, $default = false); //写入Token Token::set($token, $user_id, $expire = null); //删除Token Token::delete($token); //清除Token Token::clear($user_id = null);
基础用法
//登录 // $username="admin"; // $password="123456"; // $this->auth->login($username, $password); // $this->auth->getUser() // $this->auth->getUserinfo() //读取当前token // $this->auth->getToken() // 判断是否登录 // $this->auth->isLogin() //获取会员组别规则列表 // $this->auth->getRuleList() // 设置当前请求的URI // $controllername= $this->request->controller(); // $actionname= $this->request->action(); // $path = str_replace('.', '/', $controllername) . '/' . $actionname; // $this->auth->setRequestUri($path); // 获取当前请求的URI // $this->auth->getRequestUri() //检测是否是否有对应权限 // $this->auth-> check($path) //根据Token初始化 // $token="1f52e96b-8919-49d0-8ba9-6c4619aa4b8a"; // $this->auth->init($token); //注册 // $username="admin2"; // $password="admin2"; // $email = '18354393242@163.com'; // $mobile= '18354393243'; // $this->auth-> register($username, $password, $email, $mobile, $extend = []) //加密密码 //$this->auth->getEncryptPassword($oldpassword, $this->_user->salt); //退出 // $this->auth->logout() //真实删除 // $this->auth->delete($user_id) //查看报错 // $this->auth->getError()
php的公共构造方法使用 验证权限
//权限验证 $this->auth = Auth::instance($init, $usertable); $this->request = Request::instance(); // token $token = $this->request->server('HTTP_TOKEN'); $controllername = $this->request->controller(); $actionname = $this->request->action(); $path = str_replace('.', '/', $controllername) . '/' . $actionname; $this->auth->setRequestUri($path); // 检测是否需要验证登录 if (!$this->auth->match($this->noNeedLogin)) { //初始化 $this->auth->init($token); //检测是否登录 if (!$this->auth->isLogin()) { return $this->error('Please login first', null, 401); } // 判断是否需要验证权限 if (!$this->auth->match($this->noNeedRight)) { // 判断控制器和方法判断是否有对应权限 if (!$this->auth->check($path)) { return $this->error('You have no permission', null, 403); } } } else { // 如果有传递token才验证是否登录状态 if ($token) { $this->auth->init($token); } } var_dump($this->auth->getUser());`
基础介绍 基于tp6的jwt模块 下载地址 数据库 如果多模块的话,需要建立对应的用户表、用户分组表、用户权限表 /* Navicat MySQL Data Transfer Source Server : real-think Source Server Version : 50734 Source Host : 8.136.216.46:3306 Sour
array token_get_all ( string $source ) 解析提供的 source 源码字符,然后使用 Zend 引擎的语法分析器获取源码中的 PHP 语言的解析器代号 $tokens = token_get_all('<?php echo; ?>'); /* => array(
目录 自定义认证类,验证token 请求头中:X_FORWARDED_FOR 代之什么? 三种IP具体含义: 集群 ,分布式 集群 分布式 集群和分布式及其区别: 自定义认证类,验证token import jwt from rest_framework_jwt.authentication import BaseAuthentication from rest_framework.excepti
http://practicalnodebook.com Description Practical Node.js will show you how to: Express.js 4 Web apps Build web apps with Express.js 4, MongoDB, and Jade template engine Jade Template engines Use var
real 开发人员 我 纯css样式库,延展性强,可和vue、jq等多中框架结合,等待更多版本 下面将 real-vue(组件化)开发人员 “卓爷” real-admin(后台框架) 开发人员 “卓爷”和我 real-think(php版本后台框架) 开发人员 “卓爷”和我 real-auth-token(php版本权限验证) 开发人员 我
在 手摸手,带你用 vue 撸后台 系列二(登录权限篇) 这篇文章中其实已经详细介绍过了。 该项目中权限的实现方式是:通过获取当前用户的权限去比对路由表,生成当前用户具有的权限可访问的路由表,通过 router.addRoutes 动态挂载到 router 上。 但其实很多公司的业务逻辑可能不是这样的,举一个例子来说,很多公司的需求是每个页面的权限是动态配置的,不像本项目中是写死预设的。但其实原理
接口说明 验证权限 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 GET /authcenter/api/verify/v1.0.0/checkPermissions 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 token string header 是 当前登录用户的TOKEN permissions strin
接口说明 验证权限 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 如开启https功能,请求地址的协议应改为https,如:https://www.example.com/wish3dearth/api/access/v1.0.0/getLicenseInfo API地址 GET /authcenter/api/verify/v1.0.0/checkP
任何控制器请求,都会执行控制器的onRequest函数,当你的某个控制器需要对权限进行验证的时候,那幺请在子类中重写该函数。 protected function onRequest($action): ?bool { if(auth_fail){ $this->response()->write('auth fail'); return false;
X1.5.0新增 sp_auth_check($uid,$name=null,$relation='or') 功能: 用户权限验证 参数: $uid: 当前登录用户或者管理员的id $name:需要验证的规则列表,支持逗号分隔的权限规则或索引数组,默认为当前url $relation:如果为 'or' 表示满足任一条规则即通过验证;如果为 'and'则表示需满足所有规则才能通过验证 返回: 类型
我一直在努力使我的JSON模式正确。我有一个属性,我必须根据它来确定所需的属性。下面是我的示例,我希望通过验证,因为不存在。 这是我希望通过验证的JSON 类似地,如果是,那么上述两个JSON的验证都应该通过。