当前位置: 首页 > news >正文

easyadmin layui js监听返回结果,进行token验证防止连点

记录:easyadmin layui js监听返回结果

1.页面增加TOKEN隐藏值

<input type="hidden" name="TOKEN" value="{$row.id}">

2.JS监听返回结果,若失败,则赋值页面TOKEN值

define(["jquery", "easy-admin"], function ($, ea) {var init = {table_elem: '#currentTable',table_render_id: 'currentTableRenderId',show_url: 'cangku.bcktz/show',createCkd_url: 'cangku.bcktz/createCkd',};var Controller = {show: function () {ea.listen();},createCkd:function () {// ea.listen();ea.listen(function (data) {// 提交保存的数据return data;}, function (res) {// 成功ea.msg.success(res.msg, function () {ea.api.closeCurrentOpen({refreshTable: 'currentTableRenderId'});});}, function (res) {// 失败 ea.msg.error(res.msg, function () {if(res.data && res.data.token){$('input[name=TOKEN]').val(res.data.token);}});});},};return Controller;
});

3.功能

public function createCkd($id)
{if ($this->request->isAjax() && $this->request->isPost()) {if(jianYanToken(input('TOKEN')) === false){$this->error('token失效,请刷新页面', ['token'=>getToken()]);}$data = [......];$result = $this->logic->createCkd($data);if($result['status'] !== 'success'){$this->error($result['msg'], ['token'=>getToken()]);}$this->success('保存成功');}$this->assign('TOKEN', getToken());return $this->fetch();
}

4.common.php 定义token方法

use think\facade\Cache;// 生成token
function createToken($length=32) {$str = '12356789ABCDEFGHIJKLMNOPQRSTUVWXYZ';//34个字符$strlen = 34;while($length > $strlen){$str .= $str;$strlen += 34;}$str = str_shuffle($str);   //随机地打乱字符串中的所有字符$token = substr($str,0,$length); //截取字符串Cache::tag('pageToken')->set('pageToken_' . session('admin.id'), $token);return $token;
}// 验证token
function jianYanToken($token) {if($token != Cache::get('pageToken_' . session('admin.id'))){return false;}createToken();  //重置tokenreturn true;
}
// 获取token
function getToken() {$token = Cache::get('pageToken_' . session('admin.id'));if(!$token){$token = createToken();  //生成token}return $token;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 详细说明Java中Map和Set接口的使用方法
  • 全网最适合入门的面向对象编程教程:29 类和对象的Python实现-断言与防御性编程和help函数的使用
  • OpenFeign微服务调用组件
  • php yii2 foreach中使用事务,事务中使用了 continue
  • 快速排序(上)
  • 软件测试--python基础
  • 【Golang 面试 - 进阶题】每日 3 题(二)
  • 一篇文章解决Webpack
  • 【数据结构】了解哈希表,解决哈希冲突,用Java模拟实现哈希桶
  • 数据结构与算法 - 递归
  • 大龄程序员转型攻略:拥抱人工智能,开启新征程
  • 截止频率为声波传播的频率上、下限?如何区分两者的关系
  • Golang | Leetcode Golang题解之第301题删除无效的括号
  • Can we Deploy Web Application in Azure OpenAI of Production Level
  • ElasticSearch 关于搜索,有哪些类型的搜索
  • Google 是如何开发 Web 框架的
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • Java面向对象及其三大特征
  • laravel5.5 视图共享数据
  • npx命令介绍
  • Python socket服务器端、客户端传送信息
  • Redis中的lru算法实现
  • Selenium实战教程系列(二)---元素定位
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 飞驰在Mesos的涡轮引擎上
  • 坑!为什么View.startAnimation不起作用?
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 入口文件开始,分析Vue源码实现
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 因为阿里,他们成了“杭漂”
  • 用Canvas画一棵二叉树
  • 用element的upload组件实现多图片上传和压缩
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​【已解决】npm install​卡主不动的情况
  • ​2021半年盘点,不想你错过的重磅新书
  • # SpringBoot 如何让指定的Bean先加载
  • # 安徽锐锋科技IDMS系统简介
  • #07【面试问题整理】嵌入式软件工程师
  • #QT 笔记一
  • #WEB前端(HTML属性)
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #微信小程序:微信小程序常见的配置传旨
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (C++17) optional的使用
  • (ZT)一个美国文科博士的YardLife
  • (阿里云万网)-域名注册购买实名流程
  • (附源码)ssm高校实验室 毕业设计 800008
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (五)c52学习之旅-静态数码管
  • (五)MySQL的备份及恢复
  • (转)C语言家族扩展收藏 (转)C语言家族扩展