在ajax无刷新过程中,使用表单令牌,第一个遇到得问题就是提交表单遇到错误或提交成功仍然不想刷新该页面!而表单令牌因为页面得不刷新并不会刷新!
有人会觉得用ajax请求去获取表单令牌,这样得话用不用表单令牌我感觉区别不大,毕竟你提交之后同步更新了令牌,并抛出来,没有经过验证,起不到csrf防护作用!
在这里我突然想起来!新打开一个表单页面,表单令牌不就更新了吗?
于是就想起了if
我得思路就是这样,也不知道对不对,至少应该比ajax输出表单令牌要安全一些!
上代码 开撸
后端:
// 验证token值,跟着官方教程走
$check = $request->checkToken('__token__', $request->param());
if(false === $check) {
return json('token不正确');
}// 创建csrf控制器方法访问 一定得创建在表单权限页面内 方法名自己定
/**
* 获取表单令牌
* @param Request $request
* @return string
* @throws \Exception
*/
public function csrf(Request $request)
{
return View::fetch('csrf');
}// 模板文件就一段 View::fetch('csrf');里得输出
<meta name="csrf-token" content="{:token()}">前端:<iframe width="0" height="0" src="{:url('admin/Index/csrf')}" id="loadCSRF"></iframe>//建立一个公用fun来刷新iframe
function loadCsrf() {
var _iframe1=window.document.getElementById('loadCSRF');
_iframe1.contentWindow.location.reload(true);
}//ajax提交表单header
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('#loadCSRF').contents().find('meta[name="csrf-token"]').attr('content')
}
});到这里就完成了!你即不用刷新表单页面 ,又能达到刷新得效果!不喜勿喷!谢谢 最佳答案