Логин Laravel / Airlock AJAX - 419 (статус неизвестен)

Я пытаюсь выполнить запрос на вход в систему из другого источника, и все, кроме входа в систему, работает. Итак, если я перейду на api.example.com и войду в систему с помощью приложения laravel, а затем перейду на www.example.com, я смогу получить пользователя, вызвав конечную точку /api/user (настройка как часть шлюза). Что мне не удается сделать, так это войти в систему через AJAX с именем пользователя и паролем. Вот используемый JS:

Сначала я звоню setCSRFCookie()

    function setCSRFCookie() {
        let xhr = new XMLHttpRequest();
        xhr.open('GET', domain+'/airlock/csrf-cookie');
        xhr.withCredentials = true;
        xhr.send(null);
    }

Тогда я звоню loginUser()

    function loginUser() {
        let xhr = new XMLHttpRequest();
        let params = 'username=m@example.com&password=password';

        xhr.open('POST', domain + '/login', true);
        xhr.withCredentials = true;
        xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
        xhr.onreadystatechange = function() {
            if (xhr.readyState == 4 && xhr.status == 200) {
                alert(xhr.responseText);
            }
        }
        xhr.send(params);

    }

Я получаю 419 (unknown status)который, по-видимому, является ответом Laravel на недопустимый токен CSRF. Я посмотрел на фактический запрос, и обаAPP_NAME_session а также XSRF-TOKENпередаются как часть запроса. Я думал только о том, что/login маршрут аутентификации по умолчанию для этого не настроен, и мне нужно сделать его под /api/loginтак что он обслуживается промежуточным программным обеспечением воздушного шлюза. Я ценю любую помощь, которую вы можете оказать.

Laravel 6.12.0 Воздушный шлюз 0.1.0

1 ответ

Удостовериться api.example.com входит в config/airlock.php как это

'stateful' => [
    'localhost',
    'api.example.com'
],

И промежуточное ПО запроса должно быть auth:airlock

Другие вопросы по тегам