2016-04-04 2 views
1

У меня есть угловое приложение с узлом/эксплоитом. Ive попытался реализовать аутентификационный перехватчик с помощью httpProvider. Когда в локальном хранилище есть токен, приложение работает так, как ожидалось, и я могу получить ограниченные данные из бэкэнд, но как только я удалю токен, выйдя из системы и попытаюсь перенаправить на основной вид, я получаю TypeError : Невозможно прочитать недопустимые заголовки свойств. Если я прокомментирую строку кода в конфиге, я зарегистрировал перехватчик, ошибка исчезла. По какой-то причине, что я не смог диагностировать, приложение падает, если в локальном хранилище нет токена.

enter image description here

Authentication Interceptor:

angular.module('barmehealth') 
    .factory('authInterceptor', function(authToken) { 

    return { 
     request: function(config) { 
     var token = authToken.getToken(); 

     if (token) { 
      config.headers.Authorization = 'Bearer ' + token; 

      return config; 
     } 
     }, 
     response: function(response) { 
     return response; 
     } 
    }; 
    }); 

Зарегистрированный в объекте Config:

$httpProvider.interceptors.push('authInterceptor'); 

Я попытался решить эту проблему путем изменения кода следующим образом:

.factory('authInterceptor', function(authToken) { 

    return { 
    request: function(config) { 
     var currentToken = authToken.getToken(); 
     var token = currentToken ? currentToken : null; 

     if (token) { 
     config.headers.Authorization = 'Bearer ' + token; 

     return config; 
     } 
    }, 
    response: function(response) { 
     return response; 
    } 
    }; 
}); 

ответ

1

Ваш перехватчик auth только условно возвращает config. Это логическая ошибка. Исправить это так:

request: function(config) { 
    var token = authToken.getToken(); 

    if (token) { 
    config.headers.Authorization = 'Bearer ' + token; 
    } 

    return config; 
} 

Это важно не только поставить return заявление внутри от if блока. В противном случае, если нет токена, никакой конфиг не будет возвращен, и все получится волосатое.

Ошибка бросают, потому что, когда нет маркера и config не возвращается, угловой serverRequest метод пытается получить доступ к config.headers и обнаруживает, что config не определен, потому что вы не возвратите его.

+1

О, человек, какая ошибка в кости. Спасибо, очевидно, работает как и ожидалось. – Aaron

Смежные вопросы