2016-05-25 18 views
0

Ich habe das Problem verfolgt gefunden bis zu diesem Aufruf:Express-jwt Throwing UnathorizedError: keine Authorization Token wurde in IE11, wenn Chrome und Firefox arbeiten

var validateJwt = expressJwt({ 
    secret: config.secrets.session 
}); 

die neueste Version von Express-jwt mit

hier ist die vollständige Datei

(auth.service.js from the angular-generator yeoman scafolding) 

/** 
* Attaches the user object to the request if authenticated 
* Otherwise returns 403 
*/ 
export function isAuthenticated() { 
    return compose() 
    // Validate jwt 
    .use(function(req, res, next) { 
     // allow access_token to be passed through query parameter as well 
     if (req.query && req.query.hasOwnProperty('access_token')) { 
     req.headers.authorization = 'Bearer ' + req.query.access_token; 
     } 
     console.log('In Auth Service'); 
     console.log('Secret=' + config.secrets.session); 
     validateJwt(req, res, next); 
    }) 
    // Attach user to request 
    .use(function(req, res, next) { 
     console.log('Attach User'); 
     User.findByIdAsync(req.user._id) 
     .then(user => { 
      if (!user) { 
      return res.status(401).end(); 
      } 
      req.user = user; 
      next(); 
     }) 
     .catch(err => next(err)); 
    }); 
} 

ich die "in Auth Service" log in IE und dann dieser Fehler sehen:

UnauthorizedError: No authorization token was found<br> &nbsp; &nbsp;at middleware (.../node_modules/express-jwt/lib/index.js:80:21)<br> &nbsp; &nbsp;at Middleware_Common_Object.&lt;anonymous&gt; (.../server/auth/auth.service.js:27:7)<br> &nbsp; &nbsp;at next (.../node_modules/composable-middleware/lib/composable-middleware.js:59:18)<br> &nbsp; &nbsp;at Middleware_Common_Object.middleware (.../node_modules/composable-middleware/lib/composable-middleware.js:76:7)<br> &nbsp; &nbsp;at middleware (.../node_modules/composable-middleware/lib/composable-middleware.js:31:25)<br> &nbsp; &nbsp;at Layer.handle [as handle_request] (.../node_modules/express/lib/router/layer.js:95:5)<br> &nbsp; &nbsp;at next (.../node_modules/expres 

In Chrome und Firefox funktioniert das gut und ich sehe das Protokoll "Benutzer anhängen".

Ich bin kein ausdrücklicher oder JWT (oder Javascript für diese Angelegenheit) Experte also irgendwelche Gedanken, warum dies nicht auf IE funktioniert? Ich kann mich nicht bei IE11 anmelden.

Headers für Chrome:

Kopf

{ 
    "host":"localhost:9000", 
    "connection":"keep-alive", 
    "accept":"application/json, text/plain, */*", 
    "x-xsrf-token":"XyZYPphsmONBmSrE1MoiMh4zcclJhvArkppVM=", 
    "user-agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36", 
    "authorization":"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJfaWQiOiI1NzE1ODg0MjEyZTU3OTFkMzEwZmQ1MTMiLCJyb2xlIjoiYWRtaW4iLCJpYXQiOjE0NjQyODQwNDMsImV4cCI6MTQ2NDMwMjA0M30.YJj4LaHdhRtzfr0AdjTkZwTZM2M4B0YSoR3qactkq8o", 
    "referer":"http://localhost:9000/login", 
    "accept-encoding":"gzip, deflate, sdch", 
    "accept-language":"en-US,en;q=0.8", 
    "cookie":"connect.sid=s%3AZBJISBM2X82Odr1f763gL_hOJPCTy75G.ePulOt7zpqSQ6WHmPVqMKsjFVboteA8ALhBcR6f4J70; _gat=1; _ga=GA1.1.1107287728.1463674097; token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJfaWQiOiI1NzE1ODg0MjEyZTU3OTFkMzEwZmQ1MTMiLCJyb2xlIjoiYWRtaW4iLCJpYXQiOjE0NjQyODQwNDMsImV4cCI6MTQ2NDMwMjA0M30.YJj4LaHdhRtzfr0AdjTkZwTZM2M4B0YSoR3qactkq8o; XSRF-TOKEN=XyZYPphsmONBmSrE1MoiMh4zcclJhvArkppVM%3D", 
    "if-none-match":"W/\"2-11FxOYiYfpMxmANj4kGJzg\"" 
} 

// Körper war leer ...

Körper = {}

IE bekommen ...

IE11 : Kopf

{ 
    "x-xsrf-token":"VnE872wcJGAcsDuqFPo4yX3eHCjib8+VuohJY=", 
    "accept":"application/json, text/plain, /", 
    "referer":"http://172.20.10.2:9000/login", 
    "accept-language":"en-US", 
    "accept-encoding":"gzip, deflate", 
    "user-agent":"Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko", 
    "host":"172.20.10.2:9000", 
    "dnt":"1", 
    "connection":"Keep-Alive", 
    "cookie":"XSRF-TOKEN=VnE872wcJGAcsDuqFPo4yX3eHCjib8%2BVuohJY%3D; connect.sid=s%3A-cBMyw42buDZePLCriiGqddXI2YSg5Ow.HKcDCPksLX7PIYpp9O1XK2aDUh%2BycceyNywDN8TZOTU; _ga=GA1.4.1855210034.1464283317; _gat=1; token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJfaWQiOiI1NzE1ODg0MjEyZTU3OTFkMzEwZmQ1MTMiLCJyb2xlIjoiYWRtaW4iLCJpYXQiOjE0NjQyODQwODgsImV4cCI6MTQ2NDMwMjA4OH0.-BF00BbZknsIjAcX-EDNMtwgKaw4UFDA-Ywm4-gTlNI" 
} 

// Körper leer Körper = {}

und diese Fehler aufgetaucht. UnauthorizedError: (nur von IE - leer auch leer auf Chrome) Keine Berechtigung Token wurde

Hinzufügen Req.query gefunden

Kopf

{ "x-XSRF-Token": "Q9WJPpcGYhLyBn1YX1I8asymB1rVtTfLN1ZJk =", "accept": "application/json, text/plain, /", "referer": "http://172.20.10.2:9000/login", "Akzeptieren-Sprache": "en-US", "accept-encoding": "gzip, deflate", "user-agent": "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv: 11.0) wie Gecko", "host": "172.20.10.2:9000","dnt":"1","connection" : "Keep-Alive", "Cookie": "_Ga = GA1.4.1855210034.1464283317; _Gat = 1; XSRF-TOKEN = Q9WJPpcGYhLyBn1 YX1I8asymB1rVtTfLN1ZJk% 3D; connect.sid = s% 3ANvaz9AfTMU3t0CDq-3aRzSIF7Uw_bmfh.GV6s5MXKpk3XiULQbmQrJR2w7QAuJxUb0BGCYfmjuic; token = eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJfaWQiOiI1NzE1ODg0MjEyZTU3OTFkMzEwZmQ1MTMiLCJyb2xlIjoiYWRtaW4iLCJpYXQiOjE0NjQyODg3NzcsImV4cCI6MTQ2NDMwNjc3N30.zCsSkIdHlcCmPUHvhNv5n2mkgQDhkxG9UO0sh3y-Y3C "} Körper =

{} ReqQuery

{}

/// Nach Erics versuchen was darauf hindeutet, und ändern Sie den Code mit dem Update auf die dazugehörigen Durchführungs angular-fullstack code Ich habe dies für einen Header auf IE. (aber leider nicht eingeloggt - bekam eine 401 auf dem/api/user/me. Teil. Ich werde später noch einige Änderungen später zurück, dass ich Vielleicht habe ich letzte Nacht getan, als ich zu müde war.

Kopf

{ "akzeptieren": "application/json, text/plain, /", "if-modified-since": "Mo, 26. Juli 1997 05.00.00 GMT" , "Cache-Kontrolle": "No-Cache", "Pragma": "No-Cache", "X-Xsrf-Token": "Ajy7jYPUQj7MnixtqqrvJRyxj/pv6s2P36eo =", "Referer": "http://192.168.1.17:9000/login?auth_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.e%E2%80%8C%E2%80%8ByJfaWQiOiI1NzE1ODg0MjEyZTU3OTFkMzEwZmQ1MTMiLCJyb2xlIjoiYWRtaW4iLCJpYXQiOjE0NjQyOD%E2%80%8C%E2%80%8BQwNDMsImV4cCI6MTQ2NDMwMjA0M30.YJj4LaHdhRtzfr0AdjTkZwTZM2M4B0YSoR3qactkq8o", "akzeptieren-Sprache ":" en-US, de; q = 0.5 "," accept-encoding ":" gzip, deflate "," Benutzeragent ":" Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv: 11.0) wie Gecko "," host ":" 192.168.1.17:9000","dnt":"1","connection":"Keep-Alive" ,"cookie":"XSRF-TOKEN=Ajy7jYPUQj7Mnixtqq8rvJRyxj%2Fpv6s2P36eo%3D; connect.sid = s% 3A433OG6niC7AAUnnOQ2cnbZe0mW1Qx6Ag5.xi0KLW9FbkMOWIofcbuTXBNDGxZXfZu87XXDxZDNO6A; _ga = GA1.4.54 0511734.1464357176; _gat = 1; token = eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJfaWQiOiI1NzE1ODg0MjEyZTU3OTFkMzEwZmQ1MTMiLCJyb2xlIjoiYWRtaW4iLCJpYXQiOjE0NjQzNTc4NjIsImV4cCI6MTQ2NDM3NTg2Mn0.Si_4hZuntOLWwYpT2WGEKVpYi36WA3_aiuHZj7445LY "}

Körper = {} Anf Abfrage = {}

/// was Hinzufügen Ich denke, ist der Code, den Autorisierungsheader Ich schätze jedermanns Zeit suchen sie in hinzufügen ! das mit mir

function authInterceptor($rootScope, $q, $cookies, $injector, Util) { 
    var state; 
    return { 
    // Add authorization token to headers 
    request(config) { 
     config.headers = config.headers || {}; 
     if ($cookies.get('token') && Util.isSameOrigin(config.url)) { 
     config.headers.Authorization = 'Bearer ' + $cookies.get('token'); 
     } 
     return config; 
    }, 

    // Intercept 401s and redirect you to login 
    responseError(response) { 
     if (response.status === 401) { 
     (state || (state = $injector.get('$state'))).go('login'); 
     // remove any stale tokens 
     $cookies.remove('token'); 
     } 
     return $q.reject(response); 
    } 
    }; 
} 
+0

können Sie einen Dump-Header und einen Body aus dem 'req'-Objekt einfügen. Eine für Chome/Firefox und eine andere für IE11 –

+0

Sicher - Vorschläge, wie dies zu tun ist? Ich werde googeln, wie es morgen geht und einfügen (Limping durch meine Startup Saas Codierung - auf der Suche nach einem soliden Mitarbeiter # 1 auch) –

+0

Ich nehme an, nur Konsole log das Requ Objekt, brauchen Sie keine Paket-Sniffer richtig? –

Antwort

0

ich glaube, Sie auf diesem bekannten Problem in Winkel fullstack gestolpert: https://github.com/angular-fullstack/generator-angular-fullstack/issues/1880

Dieser Thread zeigt auch den Fix, der im letzten Quellcode festgeschrieben wurde, den Sie manuell in den generierten Code implementieren können (Auskommentieren einer Portnummerprüfung im Code, der sonst im IE fehlschlägt).

+0

Ich habe diesen Code hinzugefügt. Ich denke, ich komme näher. Ich werde später mehr Zeit haben, mich darum zu kümmern. Ich habe eine aktualisierte Kopfzeile in meiner Frage gepostet. (Ich habe auch Port 9000 hinzugefügt, da das ist, was ich lokal ausschiebe). Danke dafür - ich denke es ist etwas um die Antwort. –

+0

übrigens, die nicht direkt aus der Box funktioniert .. etwas anderes zu sehen, obwohl ich nicht einmal in dieser Datei gewesen war. –