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;
}