Laravel / шлюз AJAX логин - 419 (неизвестный статус) - PullRequest
0 голосов
/ 25 января 2020

Я пытаюсь сделать запрос на вход в систему из разных источников, и все, кроме входа в систему, работает. Так что если я go на api.example.com и войду в систему с приложением laravel, а затем go на 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 Ответ

0 голосов
/ 28 января 2020

Убедитесь, что api.example.com включено в config/airlock.php вот так

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

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

...