有一个基于Laravel 5.2.5和angularjs 1.7.4构建的现有项目。没有laravel生成的HTML页面,只有API。该项目应该使用CSRF保护。
角度文档说$http service will automatically set the X-XSRF-TOKEN header。
执行XHR请求时,$ http服务会从以下位置读取令牌: cookie(默认为XSRF-TOKEN),并将其设置为HTTP标头(通过 默认的X-XSRF-TOKEN)。
我发现Laravel 5.2 docs say that it will check for the X-XSRF-TOKEN header as well。
Laravel还将CSRF令牌存储在XSRF-TOKEN cookie中。您可以使用 cookie值来设置X-XSRF-TOKEN请求标头。一些 像Angular这样的JavaScript框架会自动为您执行此操作。它 您不太可能需要手动使用此值。
但是我得到的是Laravel的TokenMismatchException
错误。
我是否需要使用一些其他设置来实现CSRF保护?
答案 0 :(得分:0)
尝试将_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',
...
});