Php Laravel 5.4令牌不匹配异常(铬)
我在PostRoutes中遇到了Laravel 5.4的问题 提交表单时,会显示错误标记MismatchException 我以为这是关于PrefixVariable的,所以我在Github上打开了它。但是在测试了太多并尝试了不同的解决方案之后,我发现问题并不是由前缀造成的 Firefox中的一切正常,主要问题出现在chrome中。Post路由只工作一次,在提交第一个表单后,所有下一个请求都会发送到同一个URL面标记不匹配异常错误 我试过以下几点:Php Laravel 5.4令牌不匹配异常(铬),php,laravel,csrf,Php,Laravel,Csrf,我在PostRoutes中遇到了Laravel 5.4的问题 提交表单时,会显示错误标记MismatchException 我以为这是关于PrefixVariable的,所以我在Github上打开了它。但是在测试了太多并尝试了不同的解决方案之后,我发现问题并不是由前缀造成的 Firefox中的一切正常,主要问题出现在chrome中。Post路由只工作一次,在提交第一个表单后,所有下一个请求都会发送到同一个URL面标记不匹配异常错误 我试过以下几点: 清除Chrome Cookie和历史记录 运
- 清除Chrome Cookie和历史记录
- 运行php artisan缓存:清除命令
- 更改服务端口
- 防止在PHP中使用标头进行缓存
- 防止在HTML中使用元标记进行缓存
<form method="post" action="{{route('login')}}">
{!! csrf_field() !!}
<div class="row">
<div class="col-xs-12">
<div class="form-group no-margin">
<div class="col-xs-6 col-md-10 col-md-offset-1">
<input name="username" type="text" class="form-control" placeholder="نام کاربری" value="{{old('username')}}">
</div>
</div>
<div class="form-group no-margin">
<div class="col-xs-6 col-md-10 col-md-offset-1">
<input name="password" type="password" class="form-control" placeholder="کلمه عبور">
</div>
</div>
</div>
<div class="col-xs-12">
<div class="form-group no-margin">
<div class="col-xs-5 col-md-offset-1">
<input name="captcha" type="text" class="form-control" placeholder="کپچا">
</div>
<div class="col-xs-5 no-pad-right">
<img src="{{captcha_src('flat')}}" class="img-responsive">
</div>
</div>
</div>
<div class="col-xs-12 text-center">
<div class="form-group">
<button type="submit" class="btn btn-success btn-raised">ورود<div class="ripple-container"></div></button>
<button type="reset" class="btn btn-danger btn-raised">انصراف<div class="ripple-container"></div></button>
</div>
</div>
</div>
</form>
AuthController.php:
namespace App\Http\Controllers\Panel;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
class AuthController extends Controller
{
public function Login(Request $request)
{
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
return view('admin.login');
}
public function Auth(Request $request)
{
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
dump($request->all());
echo "Received";
}
}
请参考此链接。可能会对您有所帮助
告诉我一件事,您是否检查了布局文件,以下代码为安装时提供的默认laravel app.blade.php
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
<script>
window.Laravel = {!! json_encode([
'csrfToken' => csrf_token(),
]) !!};
</script>
window.Laravel={!!json\u encode([
'csrfToken'=>csrf_token(),
]) !!};
我找到了解决方案
我以前试图在设置中清除历史记录中的cookies。我从
Inspect Element>Application Tab>Storage(左侧)>Cookies>localhost:port
中删除了XSRF-TOKEN
cookie,之后一切都很好。这不是laravel的问题,是chrome的问题
因为chrome不为本地主机保存cookie,所以laravel无法保存会话id,所以无法加载创建的会话。因此它正在再生
为了测试这个问题,您可以删除所有存储的会话并重新加载页面。如果在会话存储文件夹中创建了两个会话文件,则这是适合您的解决方案
soloution:
使用127.0.0.1ip而不是本地主机
这对我有用。测试一下 这些头的目的是什么?@TobyMellor只是阻止缓存。没有标题的输出没有区别。我不使用Ajax。这只是一个简单的表单提交。我认为问题与Chrome设置有关,因为代码在Firefox中运行良好。是的,我也是。它在firefox上运行良好,而不是在chrome上@Erfun@GetWiz尝试从应用程序选项卡中清除chrome缓存。
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
<script>
window.Laravel = {!! json_encode([
'csrfToken' => csrf_token(),
]) !!};
</script>