Выйти из Drupal 8 с отдыхом - PullRequest
1 голос
/ 21 июня 2019

Я использую Drupal 8.6 (как безголовую CMS), похоже, что выход из системы можно выполнить, отправив сообщение на

http://domain/user/logout?_format=json&token=logout_token

, где logout_token - это значение, возвращенное предыдущим логином(пример ниже)

{
"current_user": {
    "uid": "65",
    "name": "FooBar"
},
"csrf_token": "WDwkGWulI1qBkwDuHtZX8Hakl4X2T7kKIm5kG5StWng",
"logout_token": "l_6TO3cYldLtOx870LI0cYNUwi0wPNSneUA4eZXcZQk"
}

Когда я вызываю службу входа в систему, я не передаю никакое значение csrf (согласно приведенному ниже коду), и оно отлично работает

function login () {
var url = host + "user/login?_format=" + format;

var data = {
    "name": "FooBar",
    "pass": "secretSauce"
}

fetch(url, {
    method: 'POST',
    body: JSON.stringify(data),
    headers:{
        'Content-Type': contentType
    }
})
.then(data => data.json())
.then(response => {
    console.log('Success response: ', JSON.stringify(response));

    if (typeof(Storage) !== "undefined") {
        localStorage.setItem("csrf_token", response.csrf_token);
        localStorage.setItem("logout_token", response.logout_token);
    } else {
        console.log('Sorry! No Web Storage support...')
    }
    })
.catch(error => console.error('Error response: ', error));

}

Когда я использую тот же токен для выхода из системы (я пробовал почти все), он не работает из моего fe (js call), но работает на Postman, передающем те же данные.Ошибка, которую я получаю в моем извлечении:

message: "'csrf_token' URL query argument is invalid."

Я установил свой пользовательский ресурс отдыха следующим образом

/user/{user}: GET, PATCH, DELETE
/entity/user: POST  
methods: GET, POST, DELETE, PATCH
formats: json
authentication: cookie

Кто-нибудь решил эту проблему?

1 Ответ

0 голосов
/ 17 июля 2019

Вы захотите использовать logout_token в качестве token параметра строки запроса.Не путайте этот токен с X-CSRF-Token, который обычно применяется к заголовкам.

Сообщение, которое вы видите с упоминанием csrf_token, является либо опечаткой, либо просто сообщением родительского класса по умолчанию и разработчиками ядра.еще не успел откорректировать этот обмен сообщениями REST Logout.

...