首页 文章

无法解密通过Angular发送的Laravel中的CSRF / XSRF令牌

提问于
浏览
0

我正在为我的应用程序使用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 我得到Token Mismatch错误 .
我的请求在 Headers 中显示了令牌(下面添加) .

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

  • 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令牌相关的错误 .

  • 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
    

相关问题