2012-08-03 35 views
1

當使用curl --basic --user someuser:somepass http://someurl/發出請求時,它會附加如下標頭:Authorization: Basic Y2FsaWRvZzpmMDBmM2IwMg==。當然,這是ExtJS 4.1或一般Javascript HTTP_Authorization功能

基本訪問驗證是一種方法,用於Web瀏覽器或其他客戶端程序在提出請求時提供用戶名和密碼。在傳輸之前,用戶名將附加冒號並與密碼連接。生成的字符串使用Base64算法進行編碼,並在HTTP標頭中傳輸並由接收方解碼,從而生成以冒號分隔的用戶名和密碼字符串。基本接入認證是由RFC 1996最初定義1945年[http://en.wikipedia.org/wiki/Basic_access_authentication][1] [1]:http://en.wikipedia.org/wiki/Basic_access_authentication

我正在尋找一種方式讓所有我的ExtJS 4.1 Ext.data.proxy.Rest代理將此添加到所有請求。這似乎是一個簡單的任務,但我沒有找到任何文檔。順便說一下,我知道如何通過headers: {'X_MyHeader':'somevalue'}屬性向代理添加標題。我只是不知道如何告訴Ext在全球範圍內爲當前的用戶名/密碼進行操作。

回答

0

我正在尋找類似的解決方案,將OAuth令牌應用到我的Ext.data.proxy.Rest代理,並找不到任何有關它的信息。非常震驚,沒有什麼關於如何做到這一點。讓我覺得我正在以錯誤的方式去做。無論如何,繼承人我想出了什麼來實現這一目標。

覆蓋Ext.data.proxy.Ajax並保留一個靜態變量,因此它適用於所有代理。然後將set authHeader與當前的標題列表合併,以便您仍可以自定義每個代理。

Ext.override(Ext.data.proxy.Ajax, { 

    statics: { 
     authHeader: undefined, 
    }, 

    /** 
    * @cfg {Object} headers 
    * Any headers to add to the Ajax request. Defaults to undefined. 
    */ 

    doRequest: function(operation, callback, scope) { 
     var writer = this.getWriter(), 
      request = this.buildRequest(operation, callback, scope); 

     if (operation.allowWrite()) { 
      request = writer.write(request); 
     } 
     console.log(this.headers); 
     Ext.apply(request, { 
      headers  : Ext.apply(this.headers, Ext.data.proxy.Ajax.authHeader) || Ext.data.proxy.Ajax.authHeader, 
      timeout  : this.timeout, 
      scope   : this, 
      callback  : this.createRequestCallback(request, operation, callback, scope), 
      method  : this.getMethod(request), 
      disableCaching: false // explicitly set it to false, ServerProxy handles caching 
     }); 

     Ext.Ajax.request(request); 

     return request; 
    } 
}); 

然後我在本地存儲中查找我的令牌,如果它在全局設置它,否則提示輸入登錄名。

MyApp.model.AuthToken.load(1, { 
    callback: function(record) { 
     // If we don't have anything in local storage for the user, show the login box. 
     if (record.get('access_token') == '') { 
      var window = Ext.create('MyApp.view.Login'); 
      window.show(); 
     } else { 
      Ext.data.proxy.Ajax.authHeader = { 'Authorization': 'Bearer ' + record.get('access_token') }; 
     } 
    } 
}); 

應該有一些額外的邏輯在那裏處理令牌過期和刷新請求,但你明白了!