2016-04-15 77 views
0

通过一些Angular2教程混混并试图获得一个POST请求在Laravel 5.2工作,我已经加入此meta标签:Angular2的Http Laravel CSRF令牌

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

,但我不知道怎么打发,在标题部分或老实说,如果这是它应该去的地方。

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

更新:所以我增加了一个功能,拉动从meta标签的CSRF令牌,但至今还没有找到一种方式来获得它传递给Laravel post请求。

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

感谢

回答

3

这就是我所做的。不知道这是否是最好的方式,但它的工作。

在主要的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令牌不匹配错误

请附和,如果有一个更好的解决方案!

0

这应该是同样的 “问题” 与<title>{{ title() }}</title>:有没有component。这意味着:Angular在这里不会/不能做任何插值。对于title标签,角度团队提供注射Title服务。对于meta标签,您必须推出自己的解决方案。

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

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

+0

谢谢本杰明。元标记语法是Laravel,它会生成令牌。我用一个函数更新了问题,将令牌拉到Angular2中,所以我现在有了Angular的令牌,我不知道如何将它传递给Laravel。 – BrioDev