正在生成CSRF令牌但列中的列字段为NULL

时间:2016-04-14 21:10:05

标签: laravel-5.2

我对laravel相对较新。我面临的问题是每当我在数据库中存储一个值。 CSRF令牌无法保存。但是它正在生成令牌,但其列字段为NULL。休息工作正常。 感谢。

修改

这是表格的代码

{!! Form::open(['url' => 'communities']) !!}
        {!! Form::label('community_name', 'community_name: ') !!}
        {!! Form::text('community_name') !!}
        {!! Form::submit('Add Community') !!}
    {!! Form::close() !!}

在令牌列中,它正在插入NULL。根据我的小知识。列只能是NULL。如果我们已经定义它是nullable()

控制器:

public function addCommunity() {
        $input = Request::all();
        Community::create($input);  
    }

路线:

Route::group(['middleware' => 'web'], function () {
    Route::get('community', 'UserControllers\UserController@show');
    Route::post('communities', 'UserControllers\UserController@addCommunity');
});

注意: 我也尝试过没有中间件,但它不起作用。

Token is working fine token is generating random value it is correct

Database demonstration

Database demonstration

型号代码:

class Community extends Model
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'community_name',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [


    ];
}

1 个答案:

答案 0 :(得分:0)

下面我添加了' _token',这是Laravel用于csrf令牌的字段名称。

因为你使用\ Community :: create($ input);为了创造它,Laravel"填充"您在$ fillable中定义的字段,然后保留该对象。

您的模型应该如下所示:

class Community extends Model
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'community_name',
        '_token',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [

    ];
}

至于保存csrf代币,你真的不必。 csrf令牌仅在一个会话期间用于防止恶意应用程序发布到您的表单,因为该应用程序没有该令牌。会话结束或重新启动(重新生成)时,csrf令牌已更新。从而使所有旧令牌无效,包括你持久存储到数据库中的旧令牌,这意味着你保存的令牌无用; - )

Saiyan Prince与Barry关于crsf代币的优秀文章分享了一个很好的链接:https://medium.com/@barryvdh/csrf-protection-in-laravel-explained-146d89ff1357#.l5toe4emw