您好,我正在使用 Stripe 在我的 Rails 5 应用程序中实现结帐。结帐流程将允许用户使用 Apple Pay 或 Google Pay 结帐。我使用了 Stripe 文档中的示例 JS 代码来实现支付请求。我还将 X-CSRF-Token 添加到服务器的 xhr post 请求中的 header 中:
...
fetch('/checkout', {
method: 'POST',
body: JSON.stringify({token: ev.token.id}),
headers: {
'content-type': 'application/json',
'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
}
})
...
在我收到的服务器响应中:
ActionController::InvalidAuthenticityToken in CheckoutController#create
我正在使用 Devise 来保护结帐,我了解到您可以通过在 Controller 中添加以下内容来禁用真实性检查:
protect_from_forgery prepend: true
但是这会导致 302 重定向到/users/sign_in
最佳答案
问题是您的请求未经过身份验证,因为它是在没有 cookie 的情况下发送的,因为 Fetch API
的 fetch
默认不包含 cookie。
设置 credentials
选项以在请求中包含 cookie。
fetch('/checkout', {
// ...
credentials: 'same-origin' // or 'include' (see the link below)
})
关于ruby-on-rails - 如何解决 Rails Stripe App 上的 InvalidAuthenticityToken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50687883/