Как решить InvalidAuthenticityToken на Rails Stripe App - PullRequest
0 голосов
/ 04 июня 2018

Привет! Я реализую оформление заказа в приложении Rails 5 с помощью Stripe.Процесс оформления заказа позволит пользователю оформить заказ через Apple Pay или Google Pay.Я использовал пример кода JS из документов Stripe для реализации запроса на оплату.Я также добавляю X-CSRF-Token к заголовкам в запросе xhr post на сервер:

...
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 для защиты проверки и я прочитал, что вы можете отключить проверки подлинности, добавив в контроллер следующее:

protect_from_forgery prepend: true

Однако это приводит к перенаправлению 302 в / users / sign_in

1 Ответ

0 голосов
/ 05 июня 2018

Проблема заключается в том, что ваш запрос не прошел проверку подлинности, поскольку он отправляется без файлов cookie, поскольку Fetch API fetch не включает файлы cookie по умолчанию.

Установите credentials возможность включить файлы cookieв запросе.

fetch('/checkout', {
  // ...
  credentials: 'same-origin'  // or 'include' (see the link below)
})

https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch#Sending_a_request_with_credentials_included

...