0

我正在与 Openresty 合作。

工作:我有一个用 Django 设计的网站,如果在 redis 中找到缓存,我正在使用 lua 代码直接从 nginx 重新调整响应内容,而无需转到 django。

问题:当我在我的页面上填写任何表格时,我收到 403(csrf_token 失败问题)。当我直接从 nginx 返回数据时出现此问题,我无法动态生成 csrf_tokrn。

需要帮助: 我想知道当我直接从 redis 重新调整响应时如何生成 csrf 令牌。

4

1 回答 1

1

我没有尝试过,但是这个 nginx conf 文件可能会有所帮助https://github.com/shrikeh/csrf-nginx-redis-lua

另一种选择是将令牌从模板中删除,并按照此处的建议通过 ajax 从 Django 动态获取它。无耻的复制粘贴:

// JS code
$.ajax({
    url: // your csrf url,
    type: 'GET',
    data: {type: 'login'},  // only if you need a session id for cookie login
    dataType: 'json',
    success: function(data) {
        $('form').each(function() {
            $(this).append(
                '<input type=hidden name=csrfmiddlewaretoken ' +
                    ' value="' + data.token + '">');
        });
    }
});

// Django code
# views.py, don't forget to add to urls.py
def get_csrf(request):
    if request.GET.get('type') == 'login':
        request.session.set_test_cookie()
    return JSONResponse({
        'status': 1,
        'token': getattr(request, 'csrf_token', 'NOTPROVIDED')
    })
于 2014-07-30T15:37:27.540 回答