0

私はOpenrestyと協力しています。

仕事:私はDjangoで設計されたウェブサイトを持っており、キャッシュがredisに見つかった場合、djangoに行かずにluaコードを使用してnginxから直接応答コンテンツを返しています。

問題:ページでフォームに入力すると、403 (csrf_token エラーの問題) が表示されます。この問題は、nginx から直接データを返すときに発生し、csrf_tokrn を動的に生成できません。

必要なヘルプ: redis から直接応答を返すときに csrf トークンを生成する方法を知りたいです。

4

1 に答える 1

1

私は試しませんでしたが、このnginx confファイルが役立つかもしれませんhttps://github.com/shrikeh/csrf-nginx-redis-lua

もう 1 つのオプションは、トークンをテンプレートから除外し、ここで提案されているように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 に答える