Express-jwt Throwing UnathorizedError: No Authorization Token was found in IE11 when Chrome and Firefox work
我已将此问题归结为此呼叫:
1 2 3 | var validateJwt = expressJwt({ secret: config.secrets.session }); |
使用最新版本的express-jwt
这是完整的文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | ( 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)); }); } |
我在IE中看到"在身份验证服务中"登录,然后出现此错误:
1 | UnauthorizedError: No authorization token was found at middleware (.../node_modules/express-jwt/lib/index.js:80:21) at Middleware_Common_Object. (.../server/auth/auth.service.js:27:7) at next (.../node_modules/composable-middleware/lib/composable-middleware.js:59:18) at Middleware_Common_Object.middleware (.../node_modules/composable-middleware/lib/composable-middleware.js:76:7) at middleware (.../node_modules/composable-middleware/lib/composable-middleware.js:31:25) at Layer.handle [as handle_request] (.../node_modules/express/lib/router/layer.js:95:5) at next (.../node_modules/expres |
在Chrome和Firefox中,此方法工作正常,我看到了"附加用户"日志。
我不是一名Express或jwt(或该主题的javascript)专家,因此对IE为何不起作用有任何想法吗?我无法在IE11中登录到我的应用程序。
Chrome标头:
头
1 2 3 4 5 6 7 8 9 10 11 12 13 | { "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\"" } |
//身体是空的...
正文= {}
IE浏览器...
IE11:
头
1 2 3 4 5 6 7 8 9 10 11 12 | { "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" } |
//身体为空
正文= {}
并弹出此错误。
UnauthorizedError:未找到授权令牌
添加Req.query(仅从IE中-在Chrome上也为空)
头
{" x-xsrf-token":" Q9WJPpcGYhLyBn1YX1I8asymB1rVtTfLN1ZJk ="," accept":" application / json,text / plain,/","re??ferer":"http://172.20.10.2:9000/login","accept -language":" en-US"," accept-encoding":" gzip,deflate"," user-agent":"像Gecko一样的Mozilla / 5.0(Windows NT 6.1; Trident / 7.0; rv:11.0)","主机":" 172.20.10.2:9000"," dnt":" 1","连接":"保持活动"," cookie":" _ ga = GA1.4.1855210034.1464283317; _gat = 1; XSRF-TOKEN = Q9WJPpcGYhLyBn1YX1I8asymB1rVtTfLN1ZJk%3D; connect.sid = S%3ANvaz9AfTMU3t0CDq-3aRzSIF7Uw_bmfh.GV6s5MXKpk3XiULQbmQrJR2w7QAuJxUb0BGCYfmjuic;标记= eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJfaWQiOiI1NzE1ODg0MjEyZTU3OTFkMzEwZmQ1MTMiLCJyb2xlIjoiYWRtaW4iLCJpYXQiOjE0NjQyODg3NzcsImV4cCI6MTQ2NDMwNjc3N30.zCsSkIdHlcCmPUHvhNv5n2mkgQDhkxG9UO0sh3y-Y3c"}
身体=
{}
查询查询
{}
///尝试了Eric的建议并实现了与角度全栈代码修复相关的代码更改后,我得到了IE上的标头。 (但不幸的是没有登录-在/ api / user / me部分获得了401。今天晚些时候,我将回复一些进一步的更改,这些更改可能是昨晚我太累时所做的。
头
{" accept":"应用程序/ json,文本/纯文本,
/"," if-modified-since":" Mon,26 Jul 1997 05:00:00 GMT"," cache-control":" no-cache"," pragma":" no-cache"," x- XSRF令牌":" Ajy7jYPUQj7Mnixtqq8rvJRyxj / pv6s2P36eo =""引用者":" http://192.168.1.17:9000/login?auth_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.e%E2%80%8C%E2%80%8ByJfaWQiOiI1NzE1ODg0MjEyZTU3OTFkMzEwZmQ1MTMiLCJyb2xlIjoiYWRtaW4iLCJpYXQiOjE0NjQyOD%E2%80 %8C%E2%80%8BQwNDMsImV4cCI6MTQ2NDMwMjA0M30.YJj4LaHdhRtzfr0AdjTkZwTZM2M4B0YSoR3qactkq8o"," accept-language":" en-US,en; q = 0.5","-late" /5.0(Windows NT 10.0; WOW64; Trident / 7.0; rv:11.0),例如Gecko"," host":" 192.168.1.17:9000","dnt":"1","connection":"Keep-Alive" ," cookie":" XSRF-TOKEN = Ajy7jYPUQj7Mnixtqq8rvJRyxj%2Fpv6s2P36eo%3D; connect.sid = s%3A43OG6niC7AAUnnOQ2cnbZe0mW1Qx6Ag5.xi0KLw9FbkMOWIofcbuTXBNDGxZXfZu87XXDxZDNO6A;
_ga = GA1.4.540511734.1464357176; _gat = 1;标记= eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJfaWQiOiI1NzE1ODg0MjEyZTU3OTFkMzEwZmQ1MTMiLCJyb2xlIjoiYWRtaW4iLCJpYXQiOjE0NjQzNTc4NjIsImV4cCI6MTQ2NDM3NTg2Mn0.Si_4hZuntOLWwYpT2WGEKVpYi36WA3_aiuHZj7445LY"}
正文= {}
需求查询= {}
///添加我认为是添加授权标头的代码
我感谢大家有时间与我一起研究这个问题!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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); } }; } |
我认为您已经在angular-fullstack中偶然发现了这个已知问题:https://github.com/angular-fullstack/generator-angular-fullstack/issues/1880
该线程还显示了最新源代码中已提交的修复程序,您可以在生成的代码中手动实施此修复程序(在IE中失败的代码中注释端口号检查)。