Я хочу использовать Sweetalert2 для инициирования выхода из системы / выхода из системы, но приведенный ниже код генерирует неверную ошибку токена CSRF в рельсах.
Приведенный ниже код инициирует УДАЛИТЬ HTTP-запрос для выхода из устройства. URL, но это когда ошибка CSRF возникает и не выходит из системы. Обратите внимание на тег ERB для destroy_user_session_path. Это выдает ту же ошибку, если я жестко закодирую ссылку на страницу выхода из системы.
Любая помощь в том, как это сделать, будет принята с благодарностью.
function logoutSwal() {
Swal.fire({
title: 'Ready to Leave?',
text: "Select 'Logout' below if you are ready to end your current session.",
type: 'question',
showCancelButton: true,
confirmButtonColor: '#3085d6',
confirmButtonText: 'Logout'
}).then((result) => {
if (result.value) {
fetch('<%= destroy_user_session_path %>', {
method: 'DELETE'
}
}
})
}
ОБНОВЛЕНИЕ
Следующая функция теперь частично работает, она правильно выходит из системы (удаляет сеанс), но не перенаправляет на страницу входа. Если я обновлю страницу (CTRL-R), я попаду на страницу входа. Я подозреваю, что проблема теперь связана с контроллером devise и ответом на AJAX / JSON?
Нужно ли обновлять контроллер, чтобы отвечать (т.е. перенаправлять) на этот запрос?
Функция:
window.ajaxLogout = function(logoutUrl) {
Swal.fire({
title: 'Ready to Leave?',
text: "Select 'Logout' below if you are ready to end your current session.",
type: 'question',
showCancelButton: true,
confirmButtonColor: '#3085d6',
confirmButtonText: 'Logout'
}).then((result) => {
if (result.value) {
$.ajax({
url: logoutUrl,
headers: {
'X-CSRF-Token': $('meta[name=csrf-token]').attr('content')
},
type: "DELETE"
})
}
})
}
Запись в журнале при запуске функции:
Started DELETE "/logout" for IPXXX at 2019-10-29 19:14:47 -0400
Processing by Users::SessionsController#destroy as */*
User Load (0.7ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2 [["id", 1], ["LIMIT", 1]]
Account Load (0.3ms) SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."subdomain_name" = $1 LIMIT $2 [["subdomain_name", "demo"], ["LIMIT", 1]]
(0.2ms) BEGIN
(0.6ms) SELECT COUNT(*) FROM "users"
(0.3ms) COMMIT
Completed 204 No Content in 19ms (ActiveRecord: 3.8ms)