2015-06-17 5 views
0

Я использую SDK с угловым шлейфом и пытаюсь реализовать обработчик 401, который автоматически обнаруживает, когда пользователь должен пройти аутентификацию. Loopback отвечает на запрос данных с помощью 401, и я использую это для вызова диалогового окна входа. В основном с использованием стратегии, описанной здесь -Loopback Угловой код ответа SDK 401 intercept

http://docs.strongloop.com/display/public/LB/AngularJS+JavaScript+SDK#AngularJSJavaScriptSDK-Handling401Unauthorized

Однако, если пользователь предоставляет плохие учетные данные затем Loopback выдает 401 и снова вызывает обработчик 401 .... Как лучше всего я должен различать 401, который подлинный отказ AUTH и неудачная попытка входа в систему?

ответ

0

Почему это так плохо?

Вы можете активировать диалог входа в систему снова и снова с того же состояния, если пользователь не знает, как войти в систему несколько раз, не так ли? Если вы уже показываете это диалоговое окно, не запускайте его еще раз и не показывайте сообщение «Ошибка входа в систему». Или используйте маршрут/login и просто перехватите любые 401 несанкционированные и отправьте на эту страницу.

Существует также сообщение об ошибке сообщения, которое вы могли бы проверить, что может разрешить различные сообщения, поэтому вы можете отобразить сообщение «session expired» вместо того, чтобы просто «вы вышли из системы, пожалуйста, войдите». Но в целом лучше оставаться родовым и просто осторожно просить повторного входа.

Вы также можете отправлять разные коды, если бэкэнд может определить, что имя пользователя/адрес электронной почты находится в системе, но это, как правило, безопасность no-no, и вам придется переопределять значения по умолчанию для проверки обратной связи.

$httpProvider.interceptors.push(function($q, $location) { 
    return { 
    responseError: function(rejection) { 
     if (rejection.status === 401) { 

     $location.path('/login'); 

     } 
     return $q.reject(rejection); 
    } 
    }; 
}); 
+0

Это плохо, потому что пример кода перехватывает 401 и кэширует назначение пользователя в $ location.nextAfterLogin. Когда (если) сбой учетных данных пользователя, то 401 снова выдается с целью/login, который затем быстро сохраняется в поле nextAfterLogin - перезаписывает оригинал '$ location.nextAfterLogin = $ location.path(); $ location.path ('/ login'); ' – MarkH

+0

Вставьте значение' $ location.nextAfterLogin' в переменную localStorage и добавьте логику, чтобы переписать ее, если это '/ login', и оставить его исходному значению. Очистите его при успешном входе в систему. Встроенный механизм auth не будет охватывать все возможные состояния для вас без дополнительной логики. – Brian

+0

Вот что я сделал в конце. Просто стыдно, что в документах Loopback описывается «решение», которое не может функционировать в очень распространенном сценарии. – MarkH