纯ajax接受token令牌,ajax同一页面多次调用使用token令牌的解决方案

我的解决方案如下:

html 每个表单有一个token {:token()}

重写token验证,销毁后生成新的token

class BaseValidate extends \think\Validate {

/**

* 验证表单令牌

* @access protected

* @param mixed $value 字段值

* @param mixed $rule 验证规则

* @param array $data 数据

* @return bool

*/

protected function token($value, $rule, $data)

{

$rule = !empty($rule) ? $rule : '__token__';

if (!isset($data[$rule]) || !Session::has($rule)) {

// 令牌数据无效

return false;

}

// 令牌验证

if (isset($data[$rule]) && Session::get($rule) === $data[$rule]) {

// 防止重复提交

Session::delete($rule); // 验证完成销毁session

\think\Request::instance()->token($rule, 'md5');

return true;

}

// 开启TOKEN重置

Session::delete($rule);

\think\Request::instance()->token($rule, 'md5');

return false;

}

}

利用Hook在ajax返回时增加新的token

\think\Hook::add('app_end',function($params){

$data = $params->getData();

if(request()->isAjax() && !empty($data) && !empty($data['code']) && $data['code'] == 200){

$token = \think\Session::get('__token__');

if($token){

$data['refresh_token'] = $token;

}

$params->data($data);

}

});

然后利用ajax的全局方法 提交时自动加上token值 判断如果有返回的refresh_token就更新页面所有的__token__值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值