2014-01-05 5 views
0

Этот проект чата с открытым исходным кодом https://github.com/meatspaces/meatspace-chat использует индексный файл jade ниже. Вы заметите, что форма имеет входное значение для токена # {csrf}. Откуда будет это значение csrf? Является ли это частью среды браузера? Я не вижу javascript в проекте, который вставляет этот токен csrf в это поле ввода.Получение токена csrf в форме

Например, когда вы посещаете корень, он просто делает индекс, как этот

app.get('/', function (req, res) { 
    res.render('index'); 
    }); 

индекс

extend layout 

block content 
    form(method='post', id='add-chat-form') 
    input(type='hidden', name='picture', id='picture') 
    .message-content 
     input(name='message', id='add-chat', class='input', maxlength='250', autocomplete='off', placeholder='Send a public message') 
     input(type='hidden', name='_csrf', value='#{csrf}') 
     input(type='hidden', name='fingerprint', id='fp') 
     input(type='hidden', name='userid', id='userid') 
     #add-chat-blocker.hidden 
     span Sending, please wait! 
    #counter 250 
+0

Скорее всего, из рамки защиты csrf промежуточного программного обеспечения. – thefourtheye

+0

https://github.com/meatspaces/meatspace-chat/blob/master/settings.js#L7 – damphat

ответ

0

Лексемы создаваемого connect csrf middleware. Вы можете видеть это в settings.js. В строке 7:

var csrf = express.csrf(); 

и линии 13:

var clientBypassCSRF = function (req, res, next) { 
    if (req.body.apiKey && nativeClients.indexOf(req.body.apiKey) > -1) { 
     next(); 
    } else { 
     csrf(req, res, next); 
    } 
    }; 

Это выставляет функцию csrfToken на req объекта, который используется в строке 45:

 res.locals.csrf = req.csrfToken(); 

Экспресс шаблонный двигателя (res.render('index'); в коде, который вы указали в своем вопросе) расширяет область шаблонов с помощью объекта res.locals, то есть, как это поле заполняется в du кольцо шаблонов.

Смежные вопросы