laravel 4:为什么Request :: header()没有得到指定的头?

Tyr*_*ter 5 php header csrf-protection laravel angularjs

我正在尝试获取标头值:

Request::header('csrf_token')

虽然,我的firebug在标题中说我将csrf_token设置为baMDpF0yrfRerkdihFack1Sa9cchUk8qBzm0hK0C.事实上,我可以csrf_token用本机的PHP代码来获取它:

getallheaders()['csrf_token']

现在问题是我正在进行XSRF保护吗?或者我的PHP代码有一个缺陷,我真的必须使用bug的laravel 4功能

Request::header('csrf_token')

它只返回空白.而我只是错过了一些东西.也许在我的Laravel 4配置等?

PS:我正在使用AngularJS,但也许我使用的客户端并不重要.我有这个链接作为我的指南:如何使用Laravel API在AngularJS表单中发送csrf_token()?

小智 8

我通过删除csrf_token中的下划线'_'解决了这个问题,所以它将是crsftoken.

Request::header('csrf_token'); // Not working

Request::header('csrftoken'); // Working!
Run Code Online (Sandbox Code Playgroud)


mst*_*rdy 1

Request::header()确实用于检索headers,但是检查令牌的设置位置。CSRF 令牌应该由 Laravel 放入会话中,然后可以通过该方法访问它Session::token()

如果您查看通过调用该类生成的 HTML Form::,您将看到一个名为 的隐藏元素_token,然后应将其与会话中的令牌进行比较。您可以使用 访问该变量Input::get('_token'),就像使用任何其他传入 GET 或 POST 变量一样。

...但是,所有这些实际上并不是必需的,因为它可以通过CSRF中的预定义过滤器轻松管理filters.php,只需将该过滤器添加到所需的路由或路由组,您就会受到保护,而无需获取进入它的细节。