无法解密通过Angular

时间:2015-04-25 09:37:09

标签: php angularjs laravel csrf

我正在为我的应用程序使用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标记似乎是集成的并且是一个大的字符串。而由函数生成的字符串是一个小字符串。

2 个答案:

答案 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