2017-08-23 4 views
0

J'ai une application angularjs qui est déployée sur le serveur de l'application et nous avons un serveur de connexion unique qui, en cas d'authentification réussie, redirige vers notre application avec le nom d'utilisateur dans les en-têtes de réponse.

Je dois lire le nom d'utilisateur des en-têtes de réponse lorsque l'application angularjs charge et l'utiliser pour afficher sur mon application.

Ce que j'ai essayé:

  1. Utilisé comme ci-dessous dans mes app.js:

    angulaire .module ('myApp', [ 'ngResource', 'ngRoute' , 'cgBusy', 'ui.bootstrap', 'ui.grid', 'ui.grid.pagination', 'ui.grid.moveColumns', 'ui.grid.selection', 'ui.grid.exporter ', ' ngMaterial ', '-menu déroulant-multiselect angulaire' ]) .run ([ "$ rootScope", la fonction ($ rootScope) {

    var checkIfAuthenticated = function (next) { 
         console.log('Inside checkIfAuthenticated ---> ' + next); 
         var matchedData = next.match(/[\?\&]username=([^\&]+)/); 
         console.log('Inside checkIfAuthenticated matchedData ---> ' + matchedData); 
    
          var proxyUserMatch = next.match(/[\?\&]username=([^\&]+)/); 
         console.log('Inside checkIfAuthenticated proxyUserMatch ---> ' + proxyUserMatch) 
    
        }; 
        var firstTimeRoute = $rootScope.$on("$locationChangeStart", function(event, next, current) { 
    
         console.log("route change (first time)->current=[" + current + "], next=[" + next + "]"); 
    
         checkIfAuthenticated(next); 
    
         firstTimeRoute(); // opt out of the event 
        }); 
    }]); 
    

Répondre

0

Vous ne pouvez pas accéder à l'en-tête HTTP sans une demande .

Si vous avez un serveur Single-Sign on les en-têtes nécessaires sont probablement dans chaque requête, vous pouvez donc envoyer une requête au serveur pour obtenir l'en-tête.

Si vous voulez envoyer une demande avant angulaire vous devez bootstrap angular manuall. Pour cela, vous pouvez simplement utiliser cet extrait:

//init angular app 
var app = angular.module("app", []); 
//inject the injector from angular 
var initInjector = angular.injector(["ng"]); 
//inject the $http service 
var $http = initInjector.get("$http"); 

//use the $http service 
$http.get("/Some/path") 
    .then(function(response) { 
     //check if we got a valid response 
     if(response != undefined){ 
      //get all header 
      var headers = response.headers(); 
      //bootstrap the application if the document is ready 
      angular.element(document).ready(function() { 
       angular.bootstrap(document, ["app"]); 
      }); 
     } 
    }; 

Avec cela, vous avez tous les en-têtes dans la variable « en-têtes ».

Vous pouvez également utiliser Jquery ou javascript.

+0

Quel est le hit http va/some/chemin? – GOK

+0

C'est un exemple de chemin. Vous devez l'ajuster à vos besoins. Ce devrait être une route vers votre serveur où vous pouvez obtenir une réponse valide – MrWook

+0

Est-ce que le code est dans app.js? ou un contrôleur? – GOK