分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

Ajax请求如何设置csrf_token

发布时间:2023-09-06 02:23责任编辑:苏小强关键词:Ajax

1. 方式一

通过获取隐藏的input标签中的csrfmiddlewaretoken值,放置在data中发送。

$.ajax({ ???url: "/cookie_ajax/", ???type: "POST", ???data: { ???????"username": "yang", ???????"password": 123, ???????// 使用jQuery取出csrfmiddlewaretoken的值,拼接到data总 ???????"csrfmiddlewaretoken": $("[name="csrfmiddlewaretoken"]").val() ???}, ???success: function(data){ ???????console.log(data); ???}})

2. 方式二

通过获取返回的cookie中的字符串,放置在请求头中发送。

注意: 需要引入一个jquery.cookie.js插件。

$.ajax({ ???url: "/cookie_ajax/", ???type: "POST", ???// 从Cookie取csrftoken, 并设置到请求头中 ???headers: {"X-CSRFToken": $.cookie("csrftoken")}, ???data: { ???????"username": "yang", ???????"password": 123 ???}, ???success: function(data){ ???????console.log(data) ???}})

或者用自己写一个getCookie方法:

function getCookie(name){ ???var cookieValue = null; ???if (document.cookie && document.cookie !== ""){ ???????var cookies = document.cookie.split(";"); ???????for (var i = 0; i < cookies.length; i++){ ???????????var cookie = jQuery.trim(cookies[i]); ???????????// Does this cookie string begin with the name we want? ???????????if (cookie.substring(0, name.length + 1) === (name + "=")){ ???????????????cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); ???????????????break; ???????????} ???????} ???} ???return cookieValue;}var csrftoken = getCookie("csrftoken");

每一次都这么写太麻烦了,可以使用$.ajaxSetup()方法为ajax请求统一设置。

function csrfSafeMethod(method){ ???// these HTTP methods do not require CSRF protection ???return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method);}$.ajaxSetup({ ???beforeSend: function(xhr, settings){ ???????if (!csrfSafeMethod(settings.type) && !this.crossDomain){ ???????????xhr.setRequestHeader("X-CSRFToken", csrftoken); ???????} ???}})

注意:
如果使用从cookie中取csrftoken的方式,需要确保cookie存在csrftoken值。

如果你的视图渲染的HTML文件中没有包含{% csrf_token %}, Django可能不会设置CSRFtoken的cookie。

这个时候需要使用ensure_csrf_cookie()装饰器强制设置Cookie。

django.views.decorators.csrf import ensure_csrf_cookie@ensure_csrf_cookiedef login(request): ???pass

Ajax请求如何设置csrf_token

原文地址:https://www.cnblogs.com/yang-wei/p/10009106.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved