Laravel 5.3 - 每个帖子请求上的TokenMismatchException

时间:2016-11-24 10:11:38

标签: laravel

我正在正常处理我的项目,当我点击刷新以查看我在其中一个html页面中所做的更改时,页面左上角显示了一条文本“重定向到:http://localhost:8888/xxx”。它将我重定向到登录页面。当我点击登录时,'TokenMismatchException'错误显示:enter image description here

登录表单有隐藏的输入_token,标题也有。正如我说的一切都很好。我这个项目已经工作了2个月。这与文件权限有关吗?

这是登录表单。

<form class="form-horizontal" role="form" method="POST" action="{{ url('/login') }}">

                    {{ csrf_field() }}

                    <div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}">
                        <label for="email" class="col-md-4 control-label">E-Mail Address</label>

                        <div class="col-md-7">
                            <input id="email" type="email" class="form-control" name="email" value="{{ old('email') }}" required autofocus>

                            @if ($errors->has('email'))
                                <span class="help-block">
                                    <strong>{{ $errors->first('email') }}</strong>
                                </span>
                            @endif
                        </div>
                    </div>

                    <div class="form-group{{ $errors->has('password') ? ' has-error' : '' }}">
                        <label for="password" class="col-md-4 control-label">Password</label>

                        <div class="col-md-7">
                            <input id="password" type="password" class="form-control" name="password" required>

                            @if ($errors->has('password'))
                                <span class="help-block">
                                    <strong>{{ $errors->first('password') }}</strong>
                                </span>
                            @endif
                        </div>
                    </div>

                     <div class="form-group">
                        <div class="col-md-8 col-md-offset-4">
                            <button type="submit" class="btn btn-primary">
                                Login
                            </button>
                            <a class="btn btn-link" href="{{ url('/password/reset') }}">
                                Forgot Your Password?
                            </a>
                        </div>
                    </div>


                </form>

谢谢:)

5 个答案:

答案 0 :(得分:3)

在我安装了一个新的laravel副本后,我开始粘贴我的旧文件,看看哪里会重新生成不匹配令牌问题。 它转到routes / web.php文件。那里有东西导致错误。 这是在routes / web.php文件的php开头标记之前的空格。 一些没有引起我注意的东西。就像那个项目工作正常,但突然间不再了。

正如我所读,空间被视为输出。检查这个解释: https://stackoverflow.com/a/4345822/6634389

答案 1 :(得分:2)

为什么不使用{{csrf_field()}}或尝试使用它?

答案 2 :(得分:2)

执行命令

php artisan cache:clear; composer dump-autoload; composer clear-cache

刷新浏览器,确保为应用生成密钥。这应该工作。对我而言,确实如此。

答案 3 :(得分:1)

您正在刷新页面,因此每次页面都加载相同的csrf-token。因此,当您尝试发布数据时,laravel会拒绝它并提供错误消息,因为每个请求都应该有一个唯一的csrf-token。你可以在这里阅读laravekl csrf protection

您应该再次重新加载页面,或者您应该通过在

中注释来禁用csrf保护
  

应用=&GT;的Http =&GT; Kernel.php

在$ middlewareGroups =&gt;'web'

 \App\Http\Middleware\VerifyCsrfToken::class,   //comment this line

答案 4 :(得分:1)

我遇到了同样的问题,我在视图中使用了以下解决方法

<input type="hidden" name="_token" value="{{ session()->getToken() }}">