Несоответствующий токен CSRF

У меня проблема с несоответствием токена csrf в KeystoneJS. Я использую это в своем файле маршрутов:

keystone.pre('routes', keystone.security.csrf.middleware.validate);
keystone.pre('routes', keystone.security.csrf.middleware.init);

В моем коде на стороне клиента я установил заголовок x-csrf-token с помощью jQuery:

$.ajaxSetup({ headers: { 'x-csrf-token' :  '{{csrf_token_value}}' } });

Теперь я отправляю почтовый запрос на маршрут, определенный в моем файле маршрутов. Токен csrf в моем заголовке запроса и мой файл cookie совпадают. Что мне не хватает?

Спасибо заранее! Даниэль


person DaTebe    schedule 31.05.2016    source источник


Ответы (1)


Решением для меня было создать метатег и использовать его для заполнения моего метода ajaxSetup.

<meta name="csrf-token" content="{{csrf_token_value}}">

$.ajaxSetup({
    headers: {
        'x-csrf-token': $('meta[name="csrf-token"]').attr('content')
    }
});

Теперь токен, отправленный в моем заголовке, и файл cookie отличаются (может быть, тот, что в файле cookie, зашифрован KeystoneJS?).

Я не понимаю, почему это имеет значение, если я помещаю токен непосредственно в свой ajaxSetup метод или метатег?

Было бы хорошо, если бы кто-нибудь мог мне это объяснить. Это определенно улучшило бы этот ответ, поскольку адресуется только «как», а не «почему».

person DaTebe    schedule 31.05.2016