【发布时间】:2021-08-13 03:47:10
【问题描述】:
我在 laravel 刀片页面上有一个 ajax 调用。此 ajax 调用可在 Chrome 和 FF 上找到,但每次使用 safari 时都会失败,并显示 419。我已经尝试了堆栈上不同线程中提到的所有解决方案。
我最新的代码迭代如下面的代码所示。 (从 iframe 收到消息后发布)
<script type="text/javascript">
window.addEventListener('message', function messageListener(event) {
var iframeUrl = "{{ \Config::get('app.nexio_url')}}";
var token = "<?php echo session('_token'); ?>";
if (event.origin === iframeUrl) {
console.log('------->event.data', event.data);
console.log('------->', '{{csrf_token()}}');
if(event.data.event === 'processed'){
$.ajax({
type: "POST",
url: "pay/paynow-nexio",
data: {'payment_data':event.data.data.id, '_token':'{{csrf_token()}}', 'response':event.data.data},
cache: false,
success: function(data){
if(data != '')
{
window.location.href = data;
}
}
});
}
}
});
</script>
我什至尝试添加
$.ajaxSetup({
headers: { 'X-CSRF-Token' : '{{csrf_token()}}' }
});
我不知道下一步该尝试什么。感谢您的任何帮助
来自开发工具
Summary
URL: https://domain.dev/pay/paynow-nexio
Status: 419 unknown status
Source: Network
Initiator:
jquery-1.9.1.min.js:5:17824
Request
POST /pay/paynow-nexio HTTP/1.1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Accept: */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate, br
Host: domain.dev
Origin: https://domain.dev
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Safari/605.1.15
Referer: https://domain.dev/create-transaction
Content-Length: 5742
Connection: keep-alive
Cookie: laravel_session=EhFPvHN4zrpKASQTjBvHkbIytClmZ1RoAsUhGOip; XSRF-TOKEN=eyJpdiI6IllFakhzK1pkMjVyVE9QYTlDL2tZcVE9PSIsInZhbHVlIjoiQll1SjZpbU9aWVkvTUN4cldLWGI1akpTaFNWYVJpWWR4b1JzNFJvY0pGbWg4dEp3dVU4RTRFTGozcmZtc2k4eiIsIm1hYyI6ImRiNDRmN2QyNWJlNGNmODhjMGE0YTM2OTFhMWMzYzBmZWFjYzkxY2Q0Zjk5OWM2MjY3ODk4ZGNlMWM0YzEwZTUifQ%3D%3D
X-Requested-With: XMLHttpRequest
X-CSRF-Token: UBLZCBfBJwMOdieJZzEl09k2OBgwkBnG7pZchjW7
Response
HTTP/1.1 419 unknown status
Set-Cookie: laravel_session=EhFPvHN4zrpKASQTjBvHkbIytClmZ1RoAsUhGOip; expires=Fri, 20-Aug-2021 03:35:51 GMT; Max-Age=604800; path=/; domain=domain.dev; httponly; samesite=lax
Content-Type: application/json
Keep-Alive: timeout=5, max=100
Date: Fri, 13 Aug 2021 03:35:50 GMT
Content-Length: 41
Cache-Control: no-cache, private
Connection: Keep-Alive
Server: Apache/2.4.38 (Debian)
X-Powered-By: PHP/7.3.29
Request Data
MIME Type: application/x-www-form-urlencoded; charset=UTF-8
_token: UBLZCBfBJwMOdieJZzEl09k2OBgwkBnG7pZchjW7
---rest of form post data ---
【问题讨论】:
-
你检查过 devtools 中的 POST,你能看到 CSRF 令牌真的被发送了吗?
-
是的,正在发送 CSRF,谢谢
-
我建议在进行任何验证之前,使用 dd() 重新检查您在发布数据中提供的数据。看来验证失败了
-
@TymurValiiev 谢谢你的评论。你是在端点建议 dd() 吗?我在函数的入口点放了一个回声,但它从来没有那么远。我怀疑它被框架更早地拒绝了。您对 dd() 的放置位置有什么建议吗?我刚刚继承了这个项目,并试图熟悉 laravel