2017-06-12 101 views
1

即時通訊嘗試使附加用戶令牌的攔截器在每個請求中都存在的情況下,該令牌存在但它不發送它......通話結束後,我查看F12(Chrome開發工具)的電話和授權標題不存在...AngularJS不發送身份驗證標頭

但是,如果我一步一步調試,我可以看到如何在config.headers.Authorization有我的令牌...但仍然沒有發送通過請...我可以請求一些幫助嗎?

這是我攔截

$httpProvider.interceptors.push(function($q, $location, $cookies){ 
    return { 
     request: function(config){ 
      config.headers = config.headers || {}; 
      let token = $cookies.get('user'); 
      if (token) { 
       config.headers.Authorization = 'Bearer ' + token; 
      } 
      return config; 
     }, 
     response: function(response){ 
      return response; 
     }, 
     responseError: function(response){ 
      if(response.status === 401 || response.status === 403){ 
       $location.path('/login') 
      } 
      return $q.reject(response); 
     } 
    } 
    }) 

CORS配置

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

配置在它之前發送

config before it be send

REQ/RES預檢 req/res preflight

+0

您的預檢'選項'請求是否返回'Access-Control-Allow-Headers:X-Requested-With,Content-Type,Authorization'? – lin

+0

是的這是,這些是我把我的服務器端允許的標頭 – FridoxFL

+0

你可以嘗試'console.log(配置);'直接上面'返回配置;'是你的配置裏面?這一切對我來說似乎都很好。 – lin

回答

2

確保您的OPTIONS請求不需要「身份驗證」,您會沒事的。 W3 spec for CORS preflight requests表示應排除用戶憑證。

如果HTTP-Status 401已被OPTIONS請求返回,則不應該由客戶端發送子請求。但似乎有一些瀏覽器的錯誤。即使OPTIONS請求返回401,此瀏覽器也會發送子請求。

node.js您可以使用req.method === 'OPTIONS'檢查請求方法。

+0

謝謝你,這解決了我的問題,我剛剛添加了這個 if( req.method ===「OPTIONS」) res.sendStatus(200); else next(); – FridoxFL