Vue +Django 开发第二关:Post请求中的CSRF验证
#Vue+Django的第二关:CSRF验证
当看到大大的Forbidden时,知道这是个硬茬.
django为了方式post给网站带来的安全问题,对每次post请求都要求在网页页面设置一个'暗语',用来验证post请求是否合规.
这对于django自带的模板系统来说是个简单方便的事情.
但对于Vue来说就有点头疼了!
处理方法:
方法1:直接干到中间件!这个简单,直接注释掉就行了!但是这个是非常不可取的.
方法二:操作稍微有点复杂,我们慢慢说
1\接上一篇文章中的 django-cors-headers 配置
#配置settings CORS_ORIGIN_ALLOW_ALL = True # 允许任何域访问 #新增下列内容: #指明在跨域访问中,后端是否支持对cookie的操作。 CORS_ALLOW_CREDENTIALS = True # 允许携带cookie
2\在vue端的网络请求配置中设置
import axios from "axios" // import VueAxios from 'vue-axios' let requests = axios.create({ baseURL:'http://192.168.3.19:8008/backend/', header:{'Content-Type':"application/x-www-form-urlencoded"}, // 指明在跨域请求时需要凭证 withCredentials: true, }) export default requests
3\通过 django.middleware.csrf 中的 get_token()方法 手动获取csrf值
#urls.py文件 urlpatterns = [ #构建后的后台路径 # url(r'^index/',views.index), #获取csrf的路由配置 url(r'^get_csrf_token/',views.get_csrf_token), # 管理员登录 #url(r'^login/',views.login) ] #vews.py 文件 def get_csrf_token(request): print(get_token(request)) return JsonResponse({'csrf_token': get_token(request) or 'NOTPROVIDED'})
4\vue端发送post请求时.先通过get请求服务器 get_csrf_token()方法获取 csrf值,然后将csrf值设置到post请求的header中
get_csrf_token() { return new Promise(function(resolve) { // 这里发送一个axios 请求 requests.get("get_csrf_token/") .then(function(res) { resolve(res.data.csrf_token) }) .catch(function() { console.log("get_csrf_token方法获取crsf错误") }) }) }, login(csrftoken) { // 这是一个登陆请求 let _this = this console.log('crsf值', csrftoken) requests.post("login/", { username: this.form.name, password: this.form.password }, // headers中添加csrftoken值 { headers: { "X-CSRFToken": csrftoken } }) .then(function(res) { // 处理业务的逻辑 }) .catch(function(error) { //console.log("登录失败") console.log(error) }) }, submit() { // 这里调用promise 方法并调用登录 let _this = this this.get_csrf_token().then(function(res) { // 调用login方法 _this.login(res) }).catch(function() { console.log('登录方法submit()中,get_crsf_token出现错误') }) },
5\进击,可以在axios请求的拦截器中添加csrftoken的获取。
这里给自己挖个坑,后续完善!
分类:
Vue
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南