网站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
答案 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
数据字段不变即可。