首页 文章

Laravel 5 AngularJS上的CSRF令牌

提问于
浏览
0

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

Angular docs说,那是$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请求标头 . 一些JavaScript框架,如Angular,会自动为您执行此操作 . 您不太可能需要手动使用此值 .

但我得到的是来自Laravel的 TokenMismatchException 错误 .

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

1 回答

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

相关问题