laravel 5 csrf_token 值为空

Posted

技术标签:

【中文标题】laravel 5 csrf_token 值为空【英文标题】:laravel 5 csrf_token value is Empty 【发布时间】:2016-05-14 23:36:36 【问题描述】:

为什么 laravel 5 csrf_token 的值总是空的?

我怎样才能得到那个令牌值?

我试过了,

  !! csrf_token !! ,  csrf_token  and 
   Form::open()  .... Form::close() 

我的输出

  <input type="hidden" name="_token"></input>

【问题讨论】:

在创建表单时是否使用web 中间件? 【参考方案1】:

试试echo Form::token();?如果不起作用,请尝试在控制台上使用php artisan generate:key

【讨论】:

这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review 他有空的 csrf 问题,所以生成密钥会帮助人 他已经接受了一个答案,你建议他尝试一下——这应该是一个评论。【参考方案2】:

这是因为您没有使用网络组中间件。 Laravel 足够聪明,知道如果您不使用该组,则不需要令牌。

尝试在Route::group(['middleware' =&gt; 'web'] 内移动您的路线并告诉我们:)

来源:不久前我犯了同样的错误。

【讨论】:

这是正确答案。只为遇到这种情况的其他人提供帮助,检查您是否使用与 web.php 分开的文件(在我的示例中,一个多租户系统,除了 web.php 用于核心路由之外,还为每个租户使用 routes.php 文件)如果您表单是在 routes.php 文件底部的 catch all 路由中生成的,您最好也将这些路由包装在 Web 中间件中。希望这是有道理的,只是说要注意捕获导致此问题的所有路线,以及它让我有点困惑。【参考方案3】:

谢谢大家。

终于找到解决办法了。

全新安装:

Route::get('foo', function () 
  return csrf_token(); // null
);

使用这个:

Route::group(['middleware' => 'web'], function () 
  Route::get('bar', function () 
    return csrf_token(); // works
);

);

它的工作。

【讨论】:

【参考方案4】:

我偶然发现了这篇文章,我花了一个下午突然遇到“由于不活动而导致页面过期。”当我发布时。 在执行“查看源代码”时,所有标记都存在且正确。 只是我包括了:

  $("#editaddTarget input").each(function () 
                    $(this).val("");

                );

当我启动一个模态时,它被解雇了。所以我今天学到了一些东西,而且我花了 5 个小时才找到这个新手叮当声!

【讨论】:

以上是关于laravel 5 csrf_token 值为空的主要内容,如果未能解决你的问题,请参考以下文章

上传文件为空 Laravel 5.4

Laravel DI 值为空

参数丢失或值为空 laravel

如果请求值为空,Laravel 设置默认值

VueJS 和 Laravel - 发布请求始终为空

TokenMismatchException laravel 5.3