【发布时间】:2019-06-16 12:00:42
【问题描述】:
从 5.4 升级到 5.7,之后每个 ajax 发布请求都是 419:
{message: "", exception: "Symfony\Component\HttpKernel\Exception\HttpException",…}
exception: "Symfony\Component\HttpKernel\Exception\HttpException"
file: "pathto/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php"
line: 204
message: ""
trace: [{,…}, {file: "pathto/public_html/app/Exceptions/Handler.php", line: 47, function: "render",…},…]
0: {,…}
class: "Illuminate\Foundation\Exceptions\Handler"
file: "pathto/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php"
function: "prepareException"
line: 176
type: "->"
遵循升级说明,特别提到了 Cookie 序列化:
protected static $serialize = true;
清除缓存,检查文件权限是否正常。降到 5.6,然后降到 5.5 laravel 版本,但没有帮助。更改了cookie名称,尝试隐身。甚至试图绕过所有:
protected $except = [
"*"
];
但没有变化。这里到底会出什么问题?
编辑:
Ajax 调用:
var $_token = $('#token').val();
var url = '/delete';
$.ajax({
headers: {'X-XSRF-TOKEN': $_token},
type: "POST",
url: url,
data: ({data: data}), // set up earlier
success: function (data) {
}
});
控制器:
public function delete(Request $request)
{
$id = $request->input('data);
Post::where('id', $id)->delete();
}
还尝试使用 $('meta[name="csrf-token"]').attr('content')
这给了我:
payload is invalid
id 令牌取自:
<?php
$encrypter = app('Illuminate\Encryption\Encrypter');
$encrypted_token = $encrypter->encrypt(csrf_token());
?>
<input id="token" type="hidden" value="{{$encrypted_token}}">
【问题讨论】:
-
发布你的控制器方法
-
你也
composer dump-autoload -
@AshleyBrown 每种方法在 5.4 中都能完美运行,但升级后它们并没有,所以我非常怀疑这是在控制器中。是的,我做了 composer dump-autoload,遗憾的是那里也没有帮助。
标签: laravel