Laravel重定向回csrf_token不匹配异常

时间:2017-05-27 17:42:11

标签: php laravel-5

按照Laravel 5.4的文档:

如果验证失败,我会重定向用户:

 return redirect('login')->withErrors('Email/password combination not recognised');

它将我带回登录路线,向我显示表单,当我再次点击提交时显示csrf_token不匹配。无论我使用back()还是重定向(),都会发生同样的事情。

@if(count($errors)>0)
<div class="alert alert-danger" role="alert">
    <strong>Errors:</strong>
    @foreach($errors->all() as $error)
    <li> {{ $error }} </li>
    @endforeach
</div>
@endif

{{ Form::open(['url' => url('login') ]) }}

<div class="form-group">
    <label for="email" class="col-md-4 control-label">Email</label>
    <div class="col-md-6">
        <input id="email" type="email" class="form-control" name="email" value="" required autofocus>

    </div>
</div>
<br>
<br>
<div class="form-group">
    <label for="password" class="col-md-4 control-label">Password</label>
    <div class="col-md-6">
        <input id="password" type="password" class="form-control" name="password" required>

    </div>
</div>

<div class="form-group">
    <div class="col-md-6 col-md-offset-4">
        <div class="checkbox">
            <label>
                <input type="checkbox" name="remember"> Remember Me
            </label>
        </div>
    </div>
</div>

<div class="form-group">
    <div class="col-md-8 col-md-offset-4">
        <button type="submit" class="btn btn-primary">
            Login                                </button>
        </div>
    </div>
</div>
{{ Form::close() }}

2 个答案:

答案 0 :(得分:0)

确保用户没有进行认证,并在重定向之前和之后验证 csrf_token

在HTML的开头使用.tabbed_content { display: flex; flex-direction: column; align-items: stretch; min-height: 0; /* NEW, esp for FF & Edge (see link below) */ } .content { padding: 1rem; background-color: #EEEEEE; overflow: auto; /* KEEP THIS, for FF & Edge (see link below) */ display: flex; /* NEW */ flex-direction: column; /* NEW */ } .scrollable { padding: 0.5rem; background-color: white; overflow: auto; /* RESTORE */ border: 1px dashed #CECECE; }

如果您正在使用jquery Ajax add:

<meta name="csrf-token" content="{{ csrf_token() }}">

到脚本标记内的基础应用布局。

查看https://laravel.com/docs/5.4/csrf

答案 1 :(得分:0)

我会留在这里为那些稍后搜索的人...

使用back()或redirect()重定向回上一个表单时。 Form :: open()确实会生成csrf令牌输入,但会为其提供空值。通过使用{{csrf_field()}}手动添加它,它不会生成此异常。