laravel 出现令牌问题的解决方案

 

 

出现的问题

CSRF 令牌问题
// 仔细检查了 表单的 CSRF 域
{!! csrf_field !!}

// 尝试更换为input
<input type="hidden" name="_token" value="{{ csrf_token() }}">

// 尝试增加页面头信息
<meta name="csrf-token" content="{{ csrf_token() }}">

// 尝试增加ajax 提交表单
<meta name="csrf-token" content="{{ csrf_token() }}" />

$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});

$("Form").submit(function(e){
e.preventDefault();
var data = $("Form").serialize();
console.log(data);
$.ajax({
url: '{{ route('admin.dologin') }}',
type: 'post',
dataType: 'json',
success: function (data) {
console.log(data);
}
});
});


以上解决方案不能解决我的问题,应该是对应解决的如图问题。

 

Stack Overflow 解决方案
原文部分解决方案 ,应该是不同的人遇到该问题的不同解决方案。

第一种解决方案
有网友建议清除缓存。

composer dump-autoload
php artisan optimize
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear

第二种解决方案
In my case, the site was fine in server but not in local. Then I remember I was working on secure website.
So in file config.session.php, set the variable secure to false
和服务器执行不一致,安全站点检测。这个是 session 的设置问题。

‘secure’ => env(‘SESSION_SECURE_COOKIE’, false),

第三种解决方案
部分人问题是没有写入权限的问题。
1
sudo chmod -R 775 storage/

问题的解决
借鉴并结合了Stack Overflow 的解决方案。


修改了文件夹的权限。
检查session 配置文件。
尝试清除缓存。
'domain' => env('SESSION_DOMAIN', '*.shop.com'),
// 还原修改为

'domain' => env('SESSION_DOMAIN', null),

之前为了尝试两个laravel session 共享的问题,这里都修改成了同一个值,未能同步。且造成了本文的问题。
现修改还原为最初的null
执行清除缓存命令。重新请求页面。

问题就此解决。

总结,出现同一个错误的情况下可能与别人的出错地方是不一样的。所以应该多掌握原理,知道过程都经过了哪里,找不出错误的情况下可以根据过程逐个排查。

 

posted @ 2019-06-13 18:27  aocn  阅读(658)  评论(0)    收藏  举报