Laravel 5 + AngularJS上的CSRF令牌

时间:2018-09-20 08:13:38

标签: angularjs laravel laravel-5 laravel-5.2

有一个基于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保护?

1 个答案:

答案 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',
    ...
});