Braintree CSRF令牌丢失

时间:2016-06-21 20:34:52

标签: node.js csrf braintree

我正在尝试在node.js中添加Braintree的drop-in UI。它看起来应该很简单,但我对Braintree和节点都很陌生并且有一些问题!首先,我创建了一个正确生成的新Braintree网关。然后我创建了一个从Braintree生成令牌的服务器端路由。

  app.route('/client_token').get(function(req, res) {
    console.log(gateway);
    gateway.clientToken.generate({}, function (err, response) {
      res.send({clientToken: response.clientToken});
    });
  })

然后我创建了客户端控制器,它正在访问令牌并允许我弹出drop-in ui。这一切都有效。

(function(){

class CheckoutComponent {
  constructor($http) {
    this.$http = $http;
  }

  $onInit() {
    this.$http({
      method: 'GET',
      url: '/client_token'
    }).then(function successCallback(response) {
        braintree.setup(
          response.data.clientToken,
          "dropin", {
            container: "payment-form"
        });
      }, function errorCallback(response) {
      });
  }
}

angular.module('toroApp')
  .component('checkout', {
    templateUrl: 'app/checkout/checkout.html',
    controller: CheckoutComponent
  });

})();

这是我被卡住的地方。然后,输入ui表单应该发送一个帖子请求到' / checkout'付款应该通过!这是我的代码,以及插件ui html。

控制器

  app.route('/checkout').post(function (req, res) {
    var transactionErrors;
    var amount = 10; // In production you should not take amounts directly from clients
    var nonce = req.body.payment_method_nonce;

    gateway.transaction.sale({
      amount: amount,
      paymentMethodNonce: nonce
    }, function (err, result) {
      if (result.success || result.transaction) {
        res.redirect('checkouts/' + result.transaction.id);
      } else {
        transactionErrors = result.errors.deepErrors();
        req.flash('error', {msg: formatErrors(transactionErrors)});
        res.redirect('checkouts/new');
      }
    });
  });

HTML

<form id="checkout" method="post" action="/checkout">
  <div id="payment-form"></div>
  <input type="submit" value="Pay $10">
</form>

<script src="https://js.braintreegateway.com/js/braintree-2.25.0.min.js"></script>

然后一切都破了......有什么想法吗?我也是StackOverflow的新手,所以对这个问题的格式和内容的任何反馈表示赞赏。

GET /client_token 200 492.478 ms - -
Error: CSRF token missing
    at checkCsrf 
POST /checkout 403 23.809 ms - -

1 个答案:

答案 0 :(得分:0)

问题是Lusca!如果您在快速配置文件中启用了Lusca,则需要在开发中禁用它。