React и Rails Devise Signout не работают - PullRequest
0 голосов
/ 11 марта 2019

Я использую React + Rails для веб-приложения и использую Devise для аутентификации пользователей.Я борюсь с тем, чтобы заставить работать пользовательскую кнопку выхода из системы.

В моем route.rb у меня есть следующее:

devise_for :users do
  delete '/users/sign_out' => 'devise/sessions#destroy' #I've also tried get instead of delete
end

Мой devise.rb настроен следующим образом:

config.sign_out_via = :delete

В моем (React) файле JS .jsx у меня есть следующая функция выхода из системы, вызываемая при нажатии кнопки.

function logout() {
    fetch("/users/sign_out", {method: 'delete'}).then((response) => { #I have also tried replacing delete with get
   }).then((result) => {
     window.location.href = '/';
   });
}

Когда я использую fetch + delete, я получаю 422ошибка при получении;когда я использую fetch + get, я получаю ошибку 404 от fetch.Я экспериментировал с различными возможными перестановками get / delete в файлах routs / devise.rb и в файле .jsx безуспешно.

В частности, на моей консоли rails я вижу следующее для ошибки 422:

Can't verify CSRF token authenticity. Completed 422 Unprocessable Entity in 4ms (ActiveRecord: 0.5ms) 

У моего контроллера приложений есть следующее:

class ApplicationController < ActionController::Base
    protect_from_forgery with: :exception
    before_action :authenticate_user!
end 

Интересно, если я сделаю это:

class ApplicationController < ActionController::Base
    protect_from_forgery with: :exception
    protect_from_forgery prepend: true
    before_action :authenticate_user!
end 

Тогда ошибка 422 исчезнет (ноприложение по-прежнему действует так, как будто пользователь вошел в систему).

...