2016-05-06 6 views
0

Ich implementierte JWT auf meiner eckigen js-Anwendung. Ich fügte die jwt Autorisierungsschlüssel mit der ganzen http Funktion hinzu. Meine Codes sind:JWT-Implementierung funktioniert nicht auf Angul js

angular.module('IttadishopServices', []) 
    .config(function Config($httpProvider, jwtInterceptorProvider) { 
     jwtInterceptorProvider.tokenGetter = function (User) { 
      var jwt = localStorage.getItem('id_token'); 
      if (localStorage.getItem("id_token") === null) { 
       User.generateToken().success(function (data) { 
        localStorage.setItem('id_token', data); 
        return data; 
       }); 

      } else { 
       return jwt; 
      } 
     } 
     $httpProvider.interceptors.push('jwtInterceptor'); 

    }); 

Jetzt ist Problem, der Autorisierungsschlüssel wird auf der Überschrift hinzugefügt. aber jede Anfrage wird doppelt an den Server gesendet. Ich habe versucht, diesen Autorisierungsschlüssel auf viele Arten hinzuzufügen, aber jedes Mal, wenn jede Anfrage doppelt an den Server sendet, eine Anfrage mit dem Autorisierungsschlüssel und eine andere ohne einen Autorisierungsschlüssel. Ein Screenshot der Konsole wurde hinzugefügt.

Console image for duplicate request

Antwort

0

Das Problem ist, dass Sie nicht ein Versprechen in Ihrem intercepter und Sie verwenden eine asynchrone Funktion in diesem Interceptor zurückkehren. Das Wrapping der asynch-Funktion in $ q und die Rückgabe eines Versprechens sollten daher das Problem beheben, dass die Anfrage zweimal gesendet wurde. Einmal warten Sie nicht auf die Async-Funktion, um abzuschließen (kein Schlüssel) und einmal, wenn das Versprechen von User.generateToken() aufgelöst wird. Wrapping:

Aber Sie sollten diese Funktion nicht im Config-Block, sondern in einer Fabrik definieren.

Quelle: http://www.webdeveasy.com/interceptors-in-angularjs-and-useful-examples/

+0

es ist okay. Ich habe versucht, alle möglichen Methoden hier zu verwenden, um es zu lösen. Die Extra-Anfrage erfolgt jedoch mit der "Option" -Methode. Also, warum die Option Methodenanforderung hier auftritt. Ich füge den Anforderungsheader hier hinzu. Anforderungs-URL: http: //api.ittadishop.local/ittadi/checkUserSession/ anfordern Methode: OPTIONEN Statuscode: 200 OK Fern Adresse: 192.168.44.44: 80 – Mohsin

+0

Die OPTIONS Anfrage eine Preflight-Anforderung ist. Weitere Informationen finden Sie hier: http://stackoverflow.com/questions/1256593/why-am-i-getting-an-options-request-inste-of-a-get-request –