有一个基于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',
...
});