Laravel 5 + AngularJS上的CSRF令牌



有一个基于Laravel5.2.5和angularjs 1.7.4构建的现有项目。没有由laravel生成的html页面,只有API。该项目应该使用CSRF保护。

Angular 文档说,$http服务将自动设置 X-XSRF-TOKEN 标头。

执行 XHR 请求时,$http 服务从 cookie(默认情况下,XSRF-TOKEN(并将其设置为HTTP标头(通过 默认的 X-XSRF 令牌(。

我发现 Laravel 5.2 文档说它也会检查 X-XSRF-TOKEN 标头。

Laravel还将CSRF令牌存储在XSRF-TOKEN cookie中。您可以使用 用于设置 X-XSRF-TOKEN 请求标头的 cookie 值。一些 JavaScript 框架,如 Angular,会自动为你执行此操作。它 不太可能需要手动使用此值。

但我得到的是拉拉维尔TokenMismatchException错误。

我是否必须使用一些额外的设置来在这里实现CSRF保护?

尝试将_token字段添加到$http服务正文中。 例:

// blade template layout without jquery:
<meta name="csrf-token" content="{{ csrf_token() }}">
...
<script>
window._token = document.querySelector("[name=csrf-token]").getAttribute("content");
</script>
// service.js
$http.post('/api/v1/user/create', {
_token: window._token,
fullname: 'foo',
...
});

最新更新