У меня есть приложение NodeJS, построенное с использованием ExpressJS. После обзора безопасности мне предложили внедрить CSRF для всех форм и ajax-представлений. Для этого я использовал csurf пакет. Для этого нам нужно передать токен CSRF на каждой странице формы, а затем вернуть его с данными представления формы.как передать токен csrf во всех представлениях в express, nodejs
Во-первых, я попытался сделать это индивидуально для страниц, содержащих формы. Но позже я понял, что у меня есть форма поиска в моем заголовке страницы, который появляется на всех страницах. Теперь я могу передать токен CSRF ко всем моим представлениям, не передавая их явно для каждого запроса. Вот общий код, который я использую для рендеринга моих страниц формы. Я использую Jade/МОПС для рендеринга:
router.get('/createcampaign', checkUserSession, middleWare2, middleware3, function(req, res){
var pageInfo = {};
pageInfo.title = 'Create New Campaign';
pageInfo.projects = req.projects;
pageInfo.session = req.session;
pageInfo.bodyid = 'createcampaign';
pageInfo.project_id = req.flash('project_id');
pageInfo.bodyclass = 'bluebody';
pageInfo.account = req.account;
pageInfo.grammars = req.grammars;
pageInfo.csrfToken = req.csrfToken; //Here I pass csrfToken to view
res.render('users/createcampaign', pageInfo);
});//createcampaign get route
Как вы можете видеть, я должен передать csrfToken контекстно вид объекта. Как я могу передать его по всему миру, чтобы он был передан всем представлениям?
Кроме того, безопасно ли безопасно, отправить этот csrfToken на все страницы и использовать его везде, где это необходимо?
Спасибо.
Thanks @yvesdaxmaz. Я сделал что-то подобное, но вместо 'app.locals' использовал' res.locals'. Можете ли вы предложить, какой из них лучше, и его следует использовать? –
res.locals ограничивает запрос, с которым связано, с другой стороны, приложение.locals доступно во всем вашем шаблоне – yvesdaxmaz
, все они схожи и могут использоваться с той же целью, разница в том, что я даю в приведенном выше комментарии , – yvesdaxmaz