Войти на сайт laravel с другого сайта в том же домене - PullRequest
0 голосов
/ 12 декабря 2018

Веб-сайт A - простая форма php Веб-сайт B - веб-сайт Laravel

На веб-сайте AI есть веб-сайт

Это функция на веб-сайте A, которая получает действительный токен с веб-сайта B

function getAuthToken() {
    $.ajax({
        url: 'https://B.website.test',
        type: 'GET',
        cache: false,
        success: function (response) {
            var csfr = $(response).filter('meta[name="csrf-token"]').prop('content');
            var token = $(response).find('input[name="_token"]').val();
            $('input[name="_token"]').val(token);
            $('input[name="csrf-token"]').val(csfr);
        },
        error: function () {
            //
        }
    });
}

Это функция, которая должна выполнять вход в систему:

function doLogin() {
    var _token = $('input[name="_token"]').val();
    var email = $('input[name="email"]').val();
    var password = $('input[name="password"]').val();

    var myDate = new Date();
    myDate.setMonth(myDate.getMonth() + 12);
    var cookieName = 'XSRF-TOKEN';

    document.cookie = cookieName + "=" + _token + ";expires=" + myDate
        + ";domain=.website.test;path=/";

    $.ajax({
        headers: {
            'XSRF-TOKEN': _token
        },
        url: 'http://B.website.test/doLogin',
        type: 'POST',
        data: {"_token": _token, "email": email, "password": password},
        cache: false,
        success: function (response) {
            alert(response);
        },
        error: function () {
            //
        }
    });

Последний фрагмент js:

$('#websiteb-login').on('click', function(e) {
    e.preventDefault();
    doLogin();
});

Все, что я получаю в ответ по сетиВкладка имеет статус 419.Любая помощь ?: D

1 Ответ

0 голосов
/ 12 декабря 2018

Есть пара вещей, которые вы должны убедиться:

Вы должны убедиться, что ваш запрос AJAX действительно отправляет куки, используя опцию:

  $.ajax({ 
    url: 'http://B.website.test/doLogin',
    type: 'POST',
    data: {"_token": _token, "email": email, "password": password},
    cache: false,
    success: function (response) {
        alert(response);
    },
    error: function () {
        //
    },
    xhrFields: {  withCredentials: true }
}

В качестве альтернативы, вы можете установитьваш домен документов должен быть базовым доменом, например:

 document.domain = 'website.test';

Это должно гарантировать, что все запросы к поддоменам веб-сайта .test не вызывают политики CORS (и, возможно, также отправляют куки автоматически).

Заголовок / cookie XSRF-TOKEN зашифрован, поэтому их нельзя использовать для отправки токена.Просто оставьте поле данных _token таким, как есть в данный момент

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...