0

クロス オリジンのログイン リクエストを実行しようとしていますが、ログイン以外はすべて機能しています。したがって、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)無効な CSRF トークンに対する Laravel の応答のように見える を取得しています。私は実際のリクエストと両方APP_NAME_sessionを見XSRF-TOKENて、リクエストの一部として渡されています。私が持っていた唯一の考えは、デフォルトの認証ルートがこれに対してセットアップされておらず、エアロックミドルウェアによって提供されるように、/login下で1つ実行する必要があるということでした. /api/login私はあなたが与えることができる任意の助けに感謝します.

Laravel 6.12.0 エアロック 0.1.0

4

1 に答える 1