错误:CSRF令牌缺失,hackathon-starter加上AngularJS

我正在将AngularJS整合到黑客马拉松。 正如我在这里用下面的test.html和test.controller.js所提到的那样完成的

<div> The record: {{record}} </div> <div align="right"> <button class="btn btn-lg btn-primary" ng-click="createRecord()" onclick="window.location.href='/order/shipping'"> <i class=""> Create record</i> </button> </div> 

test.controller.js

 (function () { 'use strict'; var injectParams = ['$scope', '$location', '$http']; function TestController($scope, $location, $http) { $scope.record = { interId: 1, sku: '107k', category: 'Useful' }; function createRecord(record) { return $http.post('/order/create', record).then(function (response) { return response.data; }) } $scope.createRecord = function () { var record = $scope.record; createRecord(record) .then(function (data) { if (data.success) { return $location.url('/shipping'); } alert('Something wrong...'); }); } }; TestController.$inject = injectParams; angular.module('miniApp') .controller('TestController', TestController); }()); 

它适用于如果csrf的值设置为false,如:

  app.use(lusca({ csrf: false, xframe: 'SAMEORIGIN', xssProtection: true })); 

当csrf的值设置为true时,会出现以下错误: 错误:缺lessCSRF令牌

解决这个问题的一个select是在luscaconfiguration之前提出'/ order / create'path的请求,如:

 app.post('/order/create', passportConf.isAuthenticated, orderController.postCreateOrder); app.use(lusca({ csrf: true, 

但是这个解决scheme不太优雅。

另一个select是在CSRF中间件中使用正则expression式将dynamicURL列入白名单 。 我尝试了这种方法,但我缺乏经验,如何正确地做到这一点。 如何用白名单解决这个问题(具体的例子)?

我可能是错的,但应该可以通过test.controller.js中的csrf。 如何做到这一点我不知道。 所以,如果有人提供具体的例子,这将是很好的。

白名单的解决scheme将被排除,因为我无法弄清楚如何使其工作。

从我可以告诉lusca没有任何内置的简单可configuration的CSRF白名单,并且hackathon-starter也没有。 从链接文章的表述方式来看,这听起来像是希望您在自己的自定义中间件中进行白名单。 要做到这一点,我想你可能需要放弃你的app.use(lusca({}))调用,而不是每个lusca中间件app.use() ,如下所示:

 var csrfMiddleware = lusca.csrf(); app.use(function(req, res, next) { // Paths that start with /foo don't need CSRF if (/^\/foo/.test(req.originalUrl)) { next(); } else { csrfMiddleware(req, res, next); } }); app.use(lusca.csp({ /* ... */})); app.use(lusca.xframe('SAMEORIGIN')); app.use(lusca.p3p('ABCDEF')); app.use(lusca.hsts({ maxAge: 31536000 })); app.use(lusca.xssProtection(true));