Почему это так плохо?
Вы можете активировать диалог входа в систему снова и снова с того же состояния, если пользователь не знает, как войти в систему несколько раз, не так ли? Если вы уже показываете это диалоговое окно, не запускайте его еще раз и не показывайте сообщение «Ошибка входа в систему». Или используйте маршрут/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);
}
};
});
Это плохо, потому что пример кода перехватывает 401 и кэширует назначение пользователя в $ location.nextAfterLogin. Когда (если) сбой учетных данных пользователя, то 401 снова выдается с целью/login, который затем быстро сохраняется в поле nextAfterLogin - перезаписывает оригинал '$ location.nextAfterLogin = $ location.path(); $ location.path ('/ login'); ' – MarkH
Вставьте значение' $ location.nextAfterLogin' в переменную localStorage и добавьте логику, чтобы переписать ее, если это '/ login', и оставить его исходному значению. Очистите его при успешном входе в систему. Встроенный механизм auth не будет охватывать все возможные состояния для вас без дополнительной логики. – Brian
Вот что я сделал в конце. Просто стыдно, что в документах Loopback описывается «решение», которое не может функционировать в очень распространенном сценарии. – MarkH