2017-04-13 1 views
0

Ich arbeite mit JWT-Tokens mit Nodejs und Angular JS. Ich fand $ httpProvider Weg der Header-Header für jede Anfrage. Aber die Header werden nicht gesendet. Meine NodeJS-App wird beim Zugriff auf diesen Header nicht definiert.AngularJS sendet keine Autorisierung oder einen zusätzlichen Schlüssel/Wert-Header

Mein Winkel Code

Für Autorisierungs-Token Einstellung -

$httpProvider.interceptors.push(['$q', '$location', '$localStorage', function($q, $location, $localStorage) { 
     return { 
      'request': function (config) { 
       config.headers = config.headers || {}; 
       if ($localStorage.token){ 
        console.log($localStorage.token) 

        config.headers.Authorization = 'Bearer ' + $localStorage.token; 
        console.log(config.headers); 
       } 
       return config; 
      }, 
      'responseError': function(response) { 
       if(response.status === 401 || response.status === 403) { 
        $location.path('#login'); 
       } 
       return $q.reject(response); 
      } 
     }; 
}]); 

Hier ist meine HTTP-Request

$scope.getSearcHistory = function(){ 
    console.log($localStorage.token); 
    console.log($rootScope.getCurrentUser()); 
    $http({ 
     url: baseUrl+'userSearches/2', 
     method : 'GET', 
     headers: { 
      'key': '1234424252' 
     } 
    }) 
    .success(function(data, status, headers, config){ 
     console.log(data); 
     $scope.searches = data; 
    }) 
    .error(function(data, status, headers, config){ 
     console.log(status); 
    }); 
} 

Dieses Contoller mein NodeJS ist

this.router.use(function(req, res, next){ 
     console.log(req.headers); 
     var bearerToken; 
     var bearerHeader = req.headers.authorization; 
     console.log(bearerHeader) 
     if (typeof bearerHeader !== 'undefined') { 
      var bearer = bearerHeader.split(" "); 
      bearerToken = bearer[1]; 
      req.token = bearerToken; 
      next(); 
     } else { 
      res.send(403).json({"Authorization": "Not allowed"}); 
     } 
    }); 

Hier meine Knoten Konsole ist, sieht es keine Header, die ich brauche -

{ 
host: 'localhost:8080', 
connection: 'keep-alive', 
'access-control-request-method': 'GET', 
origin: 'http://localhost:440', 
'user-agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36', 
'access-control-request-headers': 'authorization,key', 
accept: '*/*', 
referer: 'http://localhost:440/vokal/'} 

Antwort

0

nach Ihrem Code scheint es, dass Sie keine Probleme haben sollten. Was Sie in Winkel tun sollten Sie idealerweise Ihre benutzerdefinierte geben Header

$http({ 
    method: 'GET', 
    url: '/api', 
    headers: { 
     'Authorization': 'test', 
     'Accept': 'application/json', 
     "X-Test-Header": 'true' 
    } 
}).then(function(response) { 
    if (response.data == 'ok') { 
     // success 
    } else { 
     // failed 
    } 
}); 

Könnten Sie Ihre Konsole einmal überprüfen, ob Sie den Header bekommen.

Wenn auch dies nicht, dann vielleicht funktioniert Sie Ihren Knoten festlegen müssen alle Header

var allowCrossDomain = function(req, res, next) { 
    res.header('Access-Control-Allow-Origin', '*'); 
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'); 
    res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With'); 
}; 

und konfigurieren Sie es in Ihrer Anwendung Alle

app.configure(function() { 
    app.use(app.router); 
    app.use(allowCrossDomain); 
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
}); 

dies nur zu erlauben, Griffe, ob oder nicht Ein benutzerdefinierter Header kann gesendet werden oder nicht. Wenn Sie mit Authentifizierungs-Token arbeiten, müssen Sie diese in Ihrem $ http in angular richtig einstellen, damit sie bei jeder Anforderung gesendet werden kann. Dazu möchten Sie möglicherweise

$http.defaults.headers.common['x-access-token'] = jwt 

Hope dies hilft.

+0

Das Problem ist, dass, wenn ich den Header in Express-App bekomme, überprüfen Sie meine Frage 'access-control-request-headers: 'Autorisierung, key'' Aber ich req.headers.authorisation und req.headers.key beide sind undefiniert . Ich meine Wie kann ich auf den Wert zugreifen? – Shailendra2014

+0

Wenn Sie einen Druck auf req.headers machen, welchen Wert erhalten Sie? –

+0

letzten Code-Block in meiner Frage ist die 'console.log (req.headers') – Shailendra2014