vue-csrf 支持

vue | csrf | django | csrftoken

Posted by luoruiqing on August 20, 2021

1. 后端生成Token

增加一个接口用于生成 token 并返回

1
2
3
4
5
6
7
8
9
10
# views.py
def get_csrf_token(request):
    token = django.middleware.csrf.get_token(request)
    return JsonResponse({'token': token})

# urls.py
urlpatterns += [
    path('get-token', get_csrf_token, name="get-token"),
]

2. 前端获取token

1
2
3
4
5
6
7
8
9
$.ajax({
    url: '/get-token/',
    type: 'GET',
    dataType: 'json',
    success: function(data) {
       // 设置token到cookie中 或者其他什么方式暂存
       $.cookie('csrftoken', data.token); 
    }
});

3. 请求前附加头

1
2
3
4
5
6
7
8
9
10
$.ajax({
    url : 'YOUR_URL_HERE',
    // 使用暂存的 token
    headers: {'X-CSRFToken': $.cookie('csrftoken')},
    type: 'POST',
    dataType: 'json',
    data: {},
    success: function() {},
    error: function(xhr, errMsg, err) {},  
});

任何其他框架都可以用类似的方式来处理,只是生成的方法不同,头标识不同。