Angular2 Http Laravel CSRF令牌

时间:2016-04-15 19:52:13

标签: laravel-5 http-headers angular

混淆了一些Angular2教程并试图获得在Laravel 5.2中工作的帖子请求我添加了这个元标记:

    <meta name="csrf-token" content="{{ csrf_token() }}">

但是我不知道如何在标题部分传递它,或者老实说,如果它应该去的地方。

    let headers = new Headers({ 'Content-Type': 'application/json', 'X-CSRF-TOKEN': '???????' });

更新:所以我添加了一个从元标记中提取csrf-token的函数,但仍未找到将其传递给Laravel post请求的方法。

    getToken() {
      let token = document.querySelector('meta[property="csrf-token"]')['content'];
      return token;
   }

由于

2 个答案:

答案 0 :(得分:4)

这就是我所做的。不确定它是否是最佳方式,但它有效。

在Laravel主模板中,我添加了这个元标记。

    <meta property="csrf-token" name="csrf-token" content="{{ csrf_token() }}">

在Angular2 whatever.service.ts中,我添加了一个get token函数。

getToken() {
  let token = document.querySelector('meta[property="csrf-token"]')['content'];
  return token;
  }

在同一项服务中,我将此添加到post方法。

let headers = new Headers({ 'Content-Type': 'application/json', 'X-CSRF-TOKEN': this.getToken()});

Laravel现在接受没有500 Token Mismatch Error

的帖子

如果有更好的解决方案,请发信息!

答案 1 :(得分:0)

这应该是相同的&#34;问题&#34;和<title>{{ title() }}</title>一样:没有component。这意味着:Angular赢了/不能在这里做任何插值。对于title标记,角度团队提供可注入的Title服务。对于meta代码,您必须推出自己的解决方案。

看看这里:https://wijmo.com/blog/how-to-improve-seo-in-angularjs-applications/

他们使用document.querySelector访问meta元素,然后使用setAttribute来操作其内容。