【问题标题】:Laravel 5 No CSRF valueLaravel 5 没有 CSRF 值
【发布时间】:2016-08-11 03:17:45
【问题描述】:

我有一个带有 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 在 win 7 上使用 PHP 7.0.2)。

我也试过了:

<?php
$encrypter = app('Illuminate\Encryption\Encrypter');
$encrypted_token = $encrypter->encrypt(csrf_token());
?>
<input id="token" type="hidden" value="{{$encrypted_token}}">

得到一个值,但仍然不匹配

我确定我在做一些愚蠢的事情,但我不知道为什么我没有得到令牌值和不匹配

【问题讨论】:

    标签: php laravel-5.2 csrf csrf-protection


    【解决方案1】:

    你的问题是

     {{ csrf_field() }}
    

    应该是

    {!! csrf_field() !!}
    

    使用 {!! !!} 它将呈现 HTML 代码

    更新
    来自 Laravel 文档:

    显示未转义的数据

    默认情况下,Blade {{ }} 语句会通过 PHP 的 htmlentities 函数自动发送,以防止 XSS 攻击。如果您不希望您的数据被转义,您可以使用以下语法:

    Hello, {!! $name !!}.
    

    【讨论】:

      猜你喜欢
      • 2015-01-15
      • 2017-12-12
      • 2018-09-22
      • 1970-01-01
      • 2016-09-20
      • 2016-01-15
      • 1970-01-01
      • 2016-10-15
      • 1970-01-01
      相关资源
      最近更新 更多