2014-10-06 5 views
0

Мое угловое приложение (SPA) должно перенаправить на другой сервер, если пользователь не прошел аутентификацию. Это отдельная машина, которая означает, что может быть задержка при перенаправлении из моего углового приложения на этот сервер auth.angularjs задержка загрузки приложения до указанного состояния

То, что я ищу, чтобы достичь следующим образом:

Когда приложение будет запрошен и загружается, он либо не показывают содержание или показать ваниль/простую страницу.

Если приложение обнаруживает, что пользователь не выполнил вход или не выполнил вход, и он будет продолжать показывать эту страницу ванили, перенаправляя приложение на этот сервер auth.

Действительно оценил бы входы в этом.

Спасибо,

Edit: interceptor.js код выглядит следующим образом:

app.factory('authInterceptorService', ['$q', '$injector', '$location', 'localStorageService', 
     function ($q, $injector, $location, localStorageService) { 
.... 
     var request = function (config) { 
      config.headers = config.headers || {}; 
      var fragments = getFragment(); 
      if(fragments.access_token != undefined) 
       localStorageService.add("authorizationData", { token: fragments.access_token, token_type: fragments.token_type, state : fragments.state, }); 
      var authData = localStorageService.get('authorizationData'); 
      if(authData) 
      { 
       config.headers.Authorization = authData.token_type + ' ' + authData.token; 
       $location.path("/dashboard"); 
      } 
      else 
       logout(); 
      return config; 
     }; 

     var responseError = function (rejection) { 
      if (rejection.status === 401) { 
       logout(); 
      } 
      return $q.reject(rejection); 
     }; 

     var logout = function() 
     { 
      localStorageService.remove('authorizationData'); 
      var scope = 'my-scope'; 
        var uri = addQueryString('http://www.authserver.com/OAuth/Authorize', { 
         'client_id': 'dsfdsafdsafdsfdsfdsafasdf', 
         'redirect_uri': 'www.returnuri.com', 
         'state': 'asdfasfsdf', 
         'scope': 'scope1', 
         'response_type': 'token' 
         }); 
       window.location.replace(uri); 

     }; 

     authInterceptorServiceFactory.request = request; 
     authInterceptorServiceFactory.responseError = responseError; 
     authInterceptorServiceFactory.logout = logout; 

     return authInterceptorServiceFactory; 
    }]); 
}); 

, который подобен тому, что в настоящее время предложено Blackunknown. Но проблема в том, что целевая страница загружается полностью, а затем ее перенаправляют на сервер auth. Я знаю, что проблема в том, что они являются отдельными серверами, поэтому они могут иметь другое время отклика.

ответ

0

Поскольку вы не предусмотрено абсолютно никакого кода, вот псевдо-пример:

$http.get('yourAuthServer').success(function(response){ 
    // save session data and redirect the user to the regular page 
    $location.path('loggedInRoute'); 
}).error(function(err){ 
    // handle the failed authentification here 
    $location.path('authFailed'); 
}); 

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

1

Я использую пару вещей, чтобы сделать это в приложении mvc 5. Из которых наиболее важным компонентом является AuthorizeInterceptor. Я использую класс, созданный в моих кофе/javascripts, чем вы увидите в большинстве примеров, но основные принципы одинаковы. Я избавлю вас кофе здесь некоторые JavaScript:

(function() { 
    "use strict"; 

    var AuthorizeConfig, AuthorizeInterceptor; 

    AuthorizeInterceptor = (function() { 
    function AuthorizeInterceptor($q, $location) { 
     this.$q = $q; 
     this.$location = $location; 
     return { 
     response: function(response) { 
      return response || $q.when(response); 
     }, 
     responseError: function(rejection) { 
      if (((rejection != null ? rejection.status : void 0) != null) && rejection.status === 401) { 
      $location.path("/Login"); 
      } 
      return $q.reject(rejection); 
     } 
     }; 
    } 

    return AuthorizeInterceptor; 

    })(); 

    angular.module("myapp").factory("AuthorizeInterceptor", ["$q", "$location", AuthorizeInterceptor]); 

    AuthorizeConfig = (function() { 
    function AuthorizeConfig($httpProvider) { 
     $httpProvider.interceptors.push("AuthorizeInterceptor"); 
    } 

    return AuthorizeConfig; 

    })(); 

    angular.module("myapp").config(["$httpProvider", AuthorizeConfig]); 

}).call(this); 

Когда запрос приводит в 401 он будет перенаправлять этот человек на страницу входа приложения.

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