我正在为我的应用程序使用angularavel设置。在我的本地设置中,我不需要使用角度http请求显式发送XSRF-TOKEN
。它与laravel工作正常。我在服务器上上传了相同的设置并尝试使用我的表单登录并且laravel抛出token mismatch
错误。因此,我在开发工具中检查了请求有效负载,发现请求中没有XSRF-TOKEN标头,就像我在本地看到的那样。我相信angular会默认生成一个并在每个http请求中发送它,但不知道为什么它在这里失败。
我使用元标记方法基于本教程here以角度添加了csrf标记。我的元是
<meta name="csrf-token" content='<?php echo json_encode(csrf_token()); ?>'> // Also tried without encoding
在我的.config中我有
$httpProvider.defaults.headers.common['X-XSRF-TOKEN'] = $('meta[name=csrf-token]').attr('content');
如果我使用X-XSRF-TOKEN
,我会在Encrypter.php第142行中获得DecryptException:数据无效。
如果我使用X-CSRF-TOKEN
,我会收到令牌不匹配错误。
我的请求会在标题中显示令牌(在下面添加)。
Accept:application/json, text/plain, */*
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:68
Content-Type:application/json;charset=UTF-8
Cookie:PHPSESSID=ySsuvCYycB-9IfZZ29kSF1
Host:demo.abc.com
Origin:http://demo.abc.com
Referer:http://demo.abc.com/hexa/public/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36 FirePHP/4Chrome
X-FirePHP-Version:0.0.6
X-Wf-Max-Combined-Size:261120
X-XSRF-TOKEN:InhRWmVjcUxZNWVMRWlrWmFXR09vbGdZT1M2Z284c0NqV2x2RWxaN0Mi -->token
我在哪里犯错误?此外,来自角度的defult标记似乎是集成的并且是一个大的字符串。而由函数生成的字符串是一个小字符串。
答案 0 :(得分:1)
这对我有用,我会告诉你相关的片段。
在我的模板中,我有以下内容:
<script type="text/javascript">myApp.constant("CSRF_TOKEN", '<?= csrf_token() ?>');</script>
我有一家工厂,如:
.factory('Product', function($http, CSRF_TOKEN) {
return {
// store a product
save : function(productData) {
return $http({
method: 'POST',
url: 'http://localhost/angularjs/public/api/products',
headers: {'X-CSRF-TOKEN': CSRF_TOKEN},
data: productData
});
},
}
});
这就是我需要做的就是停止接收与csrf令牌相关的错误。
答案 1 :(得分:0)
模块中的线条为我工作....
in module angularjs
$httpProvider.defaults.headers.post['X-CSRF-TOKEN'] = $('meta[name=_token]').attr('content');
$httpProvider.defaults.headers.post['X-XSRF-TOKEN'] = $('meta[name=_token]').attr('content');
$httpProvider.defaults.withCredentials = true;
i