【问题标题】:generate csrf_token in nginx by using Openresty with Django as a backend server使用 Openresty 和 Django 作为后端服务器在 nginx 中生成 csrf_token
【发布时间】:2014-09-22 07:40:57
【问题描述】:

我正在使用 Openresty。

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

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

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

【问题讨论】:

    标签: django nginx lua openresty


    【解决方案1】:

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

    另一种选择是将令牌留在模板之外,并通过 ajax as suggested here 从 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')
        })
    

    【讨论】:

      猜你喜欢
      • 2021-11-17
      • 2020-06-27
      • 2017-01-04
      • 1970-01-01
      • 2019-10-13
      • 2012-08-08
      • 2013-02-22
      • 2013-05-16
      • 2020-02-01
      相关资源
      最近更新 更多