1

我正在使用 angular.js 和 satelizer 在 REST API 上进行 JWT 身份验证。

身份验证工作正常,页面在 3 个状态内发送授权标头。这是我的状态提供者:

$stateProvider
            .state('auth', {
                url: '/auth',
                templateUrl: '/views/login.html',
                controller: 'AuthController as auth'
            })
            .state('dashboard', {
                url: '/dashboard',
                templateUrl: '/views/dashboard.html',
                controller: 'DashboardController as dash'
            })
            .state('mitglieder', {
                url: '/mitglieder',
                templateUrl: '/views/mitglieder.html',
                controller: 'MitgliederController as mitglieder'
            })
            .state('neuesMitglied', {
                url: '/neuesMitglied',
                templateUrl: '/views/neuesMitglied.html',
                controller: 'NewMitgliederController as newMitglied'
            })
            .state('users', {
                url: '/users',
                templateUrl: '/views/main.html',
                controller: 'UserController as user'
            });
    });

但是,在状态“neuesMitglied”内,它突然不再发送授权标头并被其余 api 拒绝。我的 NewMitgliederController 看起来像这样:

(function() {

'use strict';

angular
    .module('authApp')
    .controller('NewMitgliederController', NewMitgliederController);

function NewMitgliederController($auth, $state, $http, $rootScope, $scope) {

    var vm = this;

    vm.error;
    //vm.toAdd;
    //vm.rawImage;

    //Fetched Data
    vm.fetchedData;

    var fetchData = function() {

        $http.get('APIv1/Beitragsgruppen/list/').success(function (data) {
            vm.fetchedData.mitgliedsgruppen = data;

        }).error(function (error) {
            vm.error = error;
        });


    }


    angular.element(document).ready( function(){
        $('#mainNav ul, #mainNav li').removeClass('active');
        $('#mitgliederNav').addClass('active');
        fetchData();

    } );
  }
})();

为什么它不能在这个控制器内部工作,但在所有其他控制器中,$http.get 与授权标头一起工作?

编辑

我稍微跟踪了这个行为,发现有些东西正在删除卫星拦截器设置的“授权”标头(对于这个控制器请求,该方法被触发,这个标头实际上是由卫星拦截器添加的,但后来它被删除了而且我不知道在哪里,因为我没有接触任何标题数据或拥有自己的拦截器)......这是一个错误吗?

4

1 回答 1

0

试试这个:

(function() {

'use strict';

angular
    .module('authApp')
    .controller('NewMitgliederController', NewMitgliederController);

function NewMitgliederController($http, $scope) {

    var vm = this;

    vm.error = {};
    vm.fetchedData = {};

    fetchData();

    function fetchData() {

        $http.get('APIv1/Beitragsgruppen/list/').then( function(res) {
            vm.fetchedData.mitgliedsgruppen = res;
            $('#mainNav ul, #mainNav li').removeClass('active');
            $('#mitgliederNav').addClass('active');
        }, function(err) {
            vm.error = err;
        });
    }
  }
})();
于 2015-11-02T14:42:51.723 回答