Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5.4令牌不匹配异常(铬)_Php_Laravel_Csrf - Fatal编程技术网

Php Laravel 5.4令牌不匹配异常(铬)

Php Laravel 5.4令牌不匹配异常(铬),php,laravel,csrf,Php,Laravel,Csrf,我在PostRoutes中遇到了Laravel 5.4的问题 提交表单时,会显示错误标记MismatchException 我以为这是关于PrefixVariable的,所以我在Github上打开了它。但是在测试了太多并尝试了不同的解决方案之后,我发现问题并不是由前缀造成的 Firefox中的一切正常,主要问题出现在chrome中。Post路由只工作一次,在提交第一个表单后,所有下一个请求都会发送到同一个URL面标记不匹配异常错误 我试过以下几点: 清除Chrome Cookie和历史记录 运

我在PostRoutes中遇到了Laravel 5.4的问题

提交表单时,会显示错误标记MismatchException

我以为这是关于PrefixVariable的,所以我在Github上打开了它。但是在测试了太多并尝试了不同的解决方案之后,我发现问题并不是由前缀造成的

Firefox中的一切正常,主要问题出现在chrome中。Post路由只工作一次,在提交第一个表单后,所有下一个请求都会发送到同一个URL面标记不匹配异常错误

我试过以下几点:

  • 清除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>