我有一个带有csrf令牌字段的简单登录表单。当我提交时,我得到一个令牌不匹配。当我查看表单中的值时,令牌的值为空
登录表单和身份验证都在web中间件组中
Route::group(['middleware' => ['web']],function(){
Route::get('/login',function(){
return view('auth.login');
});
Route::post('/authenticate_user','Accounts'Accounts@authenticateUser');
Route::get('/bar',function(){
return csrf_token(); // works
});
});
那条酒吧路线确实显示了一个标志性的
//login.blade
@section('content')
<div class="row">
<div class="col-md-12">
<form action="authenticate_user" method="post">
<label for="login_name">User Name</label>
<input type="text" id="login_name" name="login_name" required="required">
<label for="password">Password</label>
<input type="password" id="password" name="password" required="required">
{{ csrf_field() }}
<br>
<button type="submit" id="Login" name="login" value="Log In" class="btn btn-default">Log In</button>
</form>
</div>
</div>
@endsection
不幸的是,当我查看源代码时,csrf字段值为空
<input type="hidden" name="_token" value="">
我确实清除了laravel会话并查看了存储。我重新启动了浏览器和web服务器(XAMPP在win7上使用PHP7.0.2)。
我也试过:
<?php
$encrypter = app('Illuminate'Encryption'Encrypter');
$encrypted_token = $encrypter->encrypt(csrf_token());
?>
<input id="token" type="hidden" value="{{$encrypted_token}}">
得到了一个值,但它仍然与不匹配
我确信我在做一些愚蠢的事情,但我不知道为什么我没有得到一个令牌值和不匹配的
您的问题是
{{ csrf_field() }}
应该是
{!! csrf_field() !!}
使用{!!!}将呈现HTML代码
更新
来自Laravel文档:
显示未扫描的数据
默认情况下,Blade{{}}语句是通过PHP的htmlentities函数自动发送的,以防止XSS攻击。如果您不希望数据被转义,可以使用以下语法:
Hello, {!! $name !!}.