当前位置:  开发笔记 > 编程语言 > 正文

使用Form :: open()时,为什么我的CSRF令牌为空?

如何解决《使用Form::open()时,为什么我的CSRF令牌为空?》经验,为你挑选了1个好方法。

刚刚开始,所以请原谅我.我对CodeIgniter有扎实的把握,所以我理解发生了什么.但是,我在创建表单时注意到我的CSRF令牌是空的.我正在通过laracasts视频来了解Laravel工作流程.

myfile.blade.php

 {!! Form::open((array('action' => 'MyController@method'))) !!}
    ...
 {{!! Form::close() !!}}

这是我查看源代码时得到的内容:

我查看了配置目录,但没有看到必须启用csrf.在我需要更新的地方是否有其他设置?

谢谢你的建议.

编辑

甚至这给了我一个空的隐藏输入字段:

{{ Form::token() }}  // 

编辑

这是我的控制器的样子:

//use Illuminate\Http\Request;
use Request;
use App\Article;
use App\Http\Requests;
use App\Http\Controllers\Controller;


public function store(Request $request)
{
    $input = Request::all();

    return $input;
}

所以我更新的表单标签如下所示:

{!! Form::open((array('action' => 'ArticleController@store'))) !!}
...

当我提交时,我可以看到json响应 - 令牌显然是空的.

{"_token":"","title":"test","body":"test"}

Thomas Kim.. 26

Laravel Fundamental系列适用于Laravel 5.0,因此您有几个选择.您可以安装Laravel 5.0以继续该系列.要安装L5.0,您需要运行以下命令:

composer create-project laravel/laravel {directory} "~5.0.0" --prefer-dist

如果你想使用Laravel 5.2(我建议和Jeffrey Way很可能会很快发布一个系列),还有几件需要考虑的事情.

首先,将所有路由放在"web"中间件组中,如下所示:

Route::group(['middleware' => ['web']], function () {

    // Put your routes inside here

});

过去,默认情况下,每个请求都运行了几个中间件.在5.2中,情况已不再如此.例如,令牌存储在会话中,但在5.2中,诸如"StartSession"中间件之类的东西不会自动应用.因此,需要将"Web"中间件应用于您的路由.5.2中此更改的原因:

中间件组允许您在一个方便的密钥下将多个路由中间件组合在一起,允许您一次为路由分配多个中间件.例如,在同一应用程序中构建Web UI和API时,这非常有用.您可以将会话和CSRF路由web分组到一个组中,也可以将组中的速率限制器api分组.

此外,在Laravel Fundamental系列中,Jeffrey引入了"illuminate/html"包,但现在,大多数人都使用laravel集体包.他们处理了很多从核心中取出的Laravel软件包.结果,我会删除"illuminate/html"包.在您的composer.json文件中,删除"illuminate/html: 5.0"(或要求部分中的任何内容).此外,删除您添加到config/app.php文件中的相应服务提供商并形成外观.

要安装laravel集体的版本,在您添加此composer.json文件,而不是:"laravelcollective/html": "5.2.*-dev".然后,跑composer update.完成后,在您的config/app.php文件中,将其添加到您的providers数组:

Collective\Html\HtmlServiceProvider::class,

并将其添加到您的别名数组:

'Form' => Collective\Html\FormFacade::class,
'Html' => Collective\Html\HtmlFacade::class,

我希望我不会错过任何其他内容.



1> Thomas Kim..:

Laravel Fundamental系列适用于Laravel 5.0,因此您有几个选择.您可以安装Laravel 5.0以继续该系列.要安装L5.0,您需要运行以下命令:

composer create-project laravel/laravel {directory} "~5.0.0" --prefer-dist

如果你想使用Laravel 5.2(我建议和Jeffrey Way很可能会很快发布一个系列),还有几件需要考虑的事情.

首先,将所有路由放在"web"中间件组中,如下所示:

Route::group(['middleware' => ['web']], function () {

    // Put your routes inside here

});

过去,默认情况下,每个请求都运行了几个中间件.在5.2中,情况已不再如此.例如,令牌存储在会话中,但在5.2中,诸如"StartSession"中间件之类的东西不会自动应用.因此,需要将"Web"中间件应用于您的路由.5.2中此更改的原因:

中间件组允许您在一个方便的密钥下将多个路由中间件组合在一起,允许您一次为路由分配多个中间件.例如,在同一应用程序中构建Web UI和API时,这非常有用.您可以将会话和CSRF路由web分组到一个组中,也可以将组中的速率限制器api分组.

此外,在Laravel Fundamental系列中,Jeffrey引入了"illuminate/html"包,但现在,大多数人都使用laravel集体包.他们处理了很多从核心中取出的Laravel软件包.结果,我会删除"illuminate/html"包.在您的composer.json文件中,删除"illuminate/html: 5.0"(或要求部分中的任何内容).此外,删除您添加到config/app.php文件中的相应服务提供商并形成外观.

要安装laravel集体的版本,在您添加此composer.json文件,而不是:"laravelcollective/html": "5.2.*-dev".然后,跑composer update.完成后,在您的config/app.php文件中,将其添加到您的providers数组:

Collective\Html\HtmlServiceProvider::class,

并将其添加到您的别名数组:

'Form' => Collective\Html\FormFacade::class,
'Html' => Collective\Html\HtmlFacade::class,

我希望我不会错过任何其他内容.

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有