从同一域中的另一个网站登录laravel网站

时间:2018-12-12 12:16:28

标签: php jquery ajax laravel http

网站A-简单的php表单 网站B-Laravel网站

在网站A上,我有一个网站

这是网站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 :(得分:0)

您应该确保以下几点:

您需要使用以下选项来确保您的AJAX请求实际上发送了Cookie:

  $.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';

应该确保对site.test的子域的所有请求都不会触发CORS策略(并可能还会自动发送cookie)。

XSRF-TOKEN标头/ Cookie已加密,因此您不能使用它们发送令牌。只需保持_token数据字段不变即可。