2016-06-21 162 views
0

我正在嘗試在node.js中添加Braintree的drop-in UI。它看起來應該很簡單,但我對Braintree和節點都很陌生,並且遇到了一些問題!首先,我創建了一個新的Braintree網關,它正在正確生成。然後我創建了一個從Braintree生成一個令牌的服務器端路由。Braintree CSRF令牌丟失

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 
    }); 

})(); 

這是我卡住的地方。接下來的用戶界面表單應該發出一個'/ 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 - - 

回答

0

問題是盧斯卡!如果您在快速配置文件中啓用了Lusca,則需要在開發中將其禁用。