【问题标题】:Unable to send token from AngularJS to Laravel API无法将令牌从 AngularJS 发送到 Laravel API
【发布时间】: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', &lt;?= json_encode(csrf_token()) ?&gt;)
  • @Phil 是的。我很欣赏网络控制台的提示,我一直只使用原始控制台。

标签: angularjs laravel-5


【解决方案1】:

X-XSRF-TOKEN 更改为X-CSRF-TOKEN 解决了这个问题。

在测试时,我必须销毁 cookie 并重新启动浏览器才能启动令牌。

【讨论】:

  • 我没有使用完全相同的常量方法,但我使用相同的函数并将令牌存储在元标记中。 &lt;meta name="csrf-token" ng-init='csrf_token = &lt;?php echo csrf_token(); ?&gt;'&gt; 但是如果我使用CSRFcannot decrypt 会得到token mismatch 如果使用XSRF 则会出错!我正在使用 laravel 5。我在本地角度默认的服务器上面对这个会为每个请求生成一个令牌
  • 我在这里添加了一个问题,如果你能帮助stackoverflow.com/questions/29863483/…
【解决方案2】:

XSRF 更改为CSRF 并重新启动浏览器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 2016-09-06
    • 2019-12-31
    • 1970-01-01
    • 2020-06-08
    • 2017-06-09
    • 2018-03-29
    相关资源
    最近更新 更多