【问题标题】:Angular Jhipster - How to send x-csrf token in all http requests?Angular Jhipster - 如何在所有 http 请求中发送 x-csrf 令牌?
【发布时间】:2015-08-05 20:13:52
【问题描述】:

我从 hipster generator 生成一个应用程序并创建一个新工厂来调用我的服务。

所有现有服务都在标头中使用 x-csrf 令牌调用,但是当我尝试使用我的工厂进行 Get 或 Post 时,我得到错误 401, Unauthorized

在我的应用配置中,我有这个:

 //enable CSRF
    $httpProvider.defaults.xsrfCookieName = 'CSRF-TOKEN';
    $httpProvider.defaults.xsrfHeaderName = 'X-CSRF-TOKEN';

这是我的工厂:

angular.module('jhipsterApp')
    .factory('WalletsService', function ($http) {
        return {
            findAll: function () {
                return $http.get('api/walletslist/').then(function (response) {
                    return response.data;
                });
            }
        };
    });

当我执行 findAll 函数时,我得到这个错误:

[Error] Failed to load resource: the server responded with a status of 401 (Unauthorized) (walletslist, line 0)

x-csrf 保存在 cookie 中,但我如何在标头中传递它?

谢谢

【问题讨论】:

    标签: angularjs csrf jhipster


    【解决方案1】:

    查看 SecurityConfiguration,/api/** 需要身份验证,因此您的端点也需要它。这不是 CSRF 问题,只是您必须登录。

    如果 api/walletslist 必须是公开的,你必须在 SecurityConfiguration 中这样做

    .antMatchers("/api/walletslist").permitAll()
    

    警告:顺序很重要,并确保您的授权 URL 与您的 Angular 服务和 REST 控制器请求映射匹配。在一个地方很容易忘记最后一个斜线字符。

    你为什么要使用 $http,为什么不像其他 JHipster 服务那样使用 $resource?

    【讨论】:

    • 您是否尝试过运行 yo jhipster:entity walletslist 以使用 REST 控制器生成工作服务并摆脱您不需要的代码?
    • 我可以在我的工厂获得不同的 $resources api 吗?当我看到生成的服务代码时,所有服务都具有相同的 api 路径,并且我需要每个函数的不同路径,所以我调用 $http 而不是 $resource
    • 如果您需要不同的路径并且不能仅使用操作来解决此问题,那么您的 API 可能不是 REST;您是否尝试删除 $http.get('api/walletslist/') 中的最终 / ?
    • 问题是这不是 jhipster 问题,而且您只显示部分代码,因此无法获得帮助
    • 我没有尝试运行该代码。我关于创建工厂的想法是创建没有 $resource 逻辑的自定义函数。在这种情况下,钱包服务,我可以进行获取、更新、创建和删除,但如果我需要添加功能来更改钱包状态。我应该创建自定义函数还是使用更新方法?在最后一种情况下,我需要在请求参数中传递所需的状态,而我在请求参数中看不到它。你明白我的问题了吗?
    猜你喜欢
    • 1970-01-01
    • 2012-11-16
    • 2017-05-17
    • 2017-10-31
    • 2018-11-02
    • 2018-06-09
    • 1970-01-01
    • 2013-09-13
    • 2012-12-16
    相关资源
    最近更新 更多