缺少 Braintree CSRF 令牌
Braintree CSRF token missing
我正在尝试在 node.js 中添加 Braintree 的插件 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});
});
})
然后我创建了客户端控制器,它正在访问令牌并允许我弹出插件 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”发出 post 请求,付款应该会完成!这是我的代码,插入式 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 ">
</form>
<script src="https://js.braintreegateway.com/js/braintree-2.25.0.min.js"></script>
然后一切都崩溃了……有什么想法吗?我也是 Whosebug 的新手,因此欢迎任何有关此问题格式和内容的反馈。
GET /client_token 200 492.478 ms - -
Error: CSRF token missing
at checkCsrf
POST /checkout 403 23.809 ms - -
问题出在卢斯卡!如果您在快速配置文件中启用了 Lusca,则需要在开发中禁用它。
我正在尝试在 node.js 中添加 Braintree 的插件 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});
});
})
然后我创建了客户端控制器,它正在访问令牌并允许我弹出插件 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”发出 post 请求,付款应该会完成!这是我的代码,插入式 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 ">
</form>
<script src="https://js.braintreegateway.com/js/braintree-2.25.0.min.js"></script>
然后一切都崩溃了……有什么想法吗?我也是 Whosebug 的新手,因此欢迎任何有关此问题格式和内容的反馈。
GET /client_token 200 492.478 ms - -
Error: CSRF token missing
at checkCsrf
POST /checkout 403 23.809 ms - -
问题出在卢斯卡!如果您在快速配置文件中启用了 Lusca,则需要在开发中禁用它。