【发布时间】:2018-07-01 08:27:04
【问题描述】:
这就是我处理发送csrf_token() 的过程的方式。
在<head> 部分中,我将令牌添加为常量。
<script type="text/javascript">
var myApp = angular.module('myApp', ['ngRoute', 'ngSanitize', 'productController', 'productService'])
.constant("CSRF_TOKEN", '<?= csrf_token() ?>');
</script>
在我发送帖子数据的productService中,我包含以下内容:
headers: {'Content-Type': 'multipart/x-www-form-urlencoded', 'X-XSRF-TOKEN': CSRF_TOKEN}
然后我从 Laravel 收到错误:
DecryptException: invalid data
如果我从上面的headers: 中删除X-XSRF-TOKEN,那么我会收到TokenMismatchException。
根据另一篇文章的建议,我加密了 csrf_token(),因为 Laravel 期望令牌被加密,但即便如此我仍然收到 DecryptException: invalid data。
【问题讨论】:
-
使用浏览器的 Network 控制台确认请求中发送的值。我还会使用
json_encode()打印令牌,以防它包含任何不安全的字符(如单引号),即.constant('CSRF_TOKEN', <?= json_encode(csrf_token()) ?>) -
@Phil 是的。我很欣赏网络控制台的提示,我一直只使用原始控制台。