2015-09-17 2 views
0

Я создаю решение для проверки подлинности с помощью Angular. Я использую Interceptors для проверки Request и если недействительный токен предотвращает дальнейшую обработку и перенаправление. Вот мой упрощена Interceptor:Предотвращение выполнения HTTP-сервиса с использованием Interceptor

prism.service('APIInterceptor', function($rootScope) { 
var service = this; 

service.request = function(config) { 
    ..... 
    return config; 
    }; 
}) 

Просто ради ОНК, что я работаю на том, что правильный способ остановить этот запрос от какой-либо дальнейшей обработки быть?

Благодаря

+0

'return null; ' вероятно, сделает это. – CollinD

+0

Да, он не будет обрабатывать данные, но в консоли он говорит: TypeError: Невозможно прочитать заголовки свойств null – Mark

+0

Попробуйте распечатать объект конфигурации, посмотрите, какие методы и поля доступны в нем. Если вы не можете полностью отменить запрос XHR от инициирования, возможно, вы можете просто указать его на недопустимый URL. Это все равно бросит 404, но это не должно ничего сломать. – CollinD

ответ

1

От углового Docs на перехватчики для метода request:

request: interceptors get called with a http config object. The function is free to modify the config object or create a new one. The function needs to return the config object directly, or a promise containing the config or a new config object.

Остальная часть документации может быть найдено here. Из этого вы можете видеть, что метод также может вернуть обещание (что на самом деле довольно удивительно), поэтому вы всегда можете отказаться от него.

попробовать что-то вроде этого:

prism.service('APIInterceptor', function($q, $rootScope) { 
    this.request = function(config) { 
    if(/*config is not valid*/) { 
     return $q.reject({message: 'ERROR, ERROR... INTRUDER ALERT!', status: 401, config: config}); 
    } else { 
     return config; 
    } 
    }; 
}); 

И посмотреть, как она может быть обработана (я понятия не имею, что ваше приложение будет делать). Дайте мне знать, если это сработает для вас!

EDIT: Мой ответ принят, но является неполным, и он будет преследовать меня навсегда, если я не завершу его. Поэтому, написав собственный тестовый код, я понял, что вы можете сделать 1 из 2 вещей в этой ситуации. Во-первых, чтобы справиться с несанкционированным запрос в перехватчика:

... 
this.request = function(config) { 
    if(/* config is not authorized */) { 
    // Do something here like redirect/issue another request... whatever 
    return $q.reject({/*whatever the hell you want*/}); 
    } else ... 
}; 
... 

Это, очевидно, работает лучше всего, если вы хотите, чтобы обрабатывать все несанкционированные запросы и то же. Однако, если вы этого не сделаете, вторым вариантом является отсрочка на услугу, выдавшую запрос. Например, если вы используете $http вы можете сделать это:

$http.get('/words/words/words/').then(function(){ 
    // This is where you handle a successful request. 
}, function(error) { 
    // Handle your error here. Please take note that this error message is 
    // whatever you sent back in the `reject` previously 
}); 

Хотелось бы надеяться, что очищает несколько вещей вверх.

+0

Я попытался вернуть ваш код. Обработка была остановлена, но я не видел никаких предупреждающих сообщений, если это то, что вы ожидали. – Mark

+0

Сообщение, вероятно, возвращается в '$ http.get ('.../someroute /'). Error (function (error) {});' callback. Однако, если ваш план действий при сбое авторизации является широко используемым приложением, вы можете написать любую логику, в которой вы хотите, чтобы либо перенаправить/уведомить другие службы, либо не иметь дело с полученной вами ошибкой. Если ваш план действий отличается по запросу, вы должны попробовать обратный вызов 'error' – Mike

+0

Ну, он возвращает ответ = response.then (функция (данные) { return data.data; }); Было бы неплохо вернуться к response.catch (функция (данные) { $ q.reject (data); }); – Mark

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