首页 文章

Laravel 5没有CSRF Value

提问于
浏览
0

我有一个简单的登录表单,带有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服务器(在win 7上使用PHP 7.0.2的XAMPP) .

我也尝试过:

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

有 Value 但仍然不匹配

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

1 回答

  • 0

    你的问题是

    {{ csrf_field() }}
    

    它应该是

    {!! csrf_field() !!}
    

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

    UPDATE
    来自Laravel文档:

    Displaying Unescaped Data

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

    Hello, {!! $name !!}.
    

相关问题