0

我一直在尋找,但似乎無法找到有用的答案。從AngularJs應用程序訪問Django服務器:簡單的身份驗證解決方案?

我寫了一個角度應用程序,試圖從我的公司編寫的django RESTful後端中提取數據。我有一個用戶名和密碼,但我不確定如何編寫獲取請求以向後端提供身份驗證憑據。我也對我應該在標題中提供的內容感到困惑。

最終,我們將使用nginx進行通信。

我想

我正在尋找一個固定的角​​度應用程序本身編寫。我正在嘗試將角度應用程序與django後端儘可能分開。我已經啓用了跨源資源共享。

這將是一個樂隊援助修復,只是爲了顯示來自後端的數據。它不需要以任何方式永久。

到目前爲止,我曾嘗試:

app.factory('mySamples', ['$http', function($http) { 
    return $http.get('website/api/foo', { 
    headers: {'username':"foo", 'password': 'bar'} 
    }).success(function(data) { 
    return data; 
    }).error(function(err) { 
    return err; 
    }); 
}; 

app.factory('mySamples', ['$http', function($http) { 
    return $http({method: 'GET', url: 'website/api/samples/', headers: { 
     'user': 'foo', 'auth':'bar'} 
    }); 
}; 

第二工廠,我寫的回報方法:在返回標題下的網絡檢查器選項。是否有人只是爲了從我的api獲取數據而快速修復?

編輯:我的django後端不支持基本認證,只基於會話。我如何編輯我的獲取請求?

回答

1

(1)如果您正在使用基本身份驗證,您可以添加一個基本的身份驗證,像這樣:

app.factory('mySamples', ['$http', function($http) { 
    var credentials = btoa(username + ':' + authtoken); 
    var authorization = { 
     'Authorization': 'Basic ' + credentials 
    };   
    return $http({method: 'GET', url: 'website/api/samples/', headers: authorization }); 
}; 

如果你所有的$ HTTP調用的使用相同的身份驗證,可以使用$http.defaults.headers.common.Authorization

(2)我很確定nginx不提供會話處理 - 你必須在django中這樣做。

(3)我通常不使用REST會話,因爲REST通常是無狀態的。


OP詢問如何啓用CORS。啓用CORS通常在服務器端完成。你可以在nginx中通過加入:

add_header 'Access-Control-Allow-Origin' '*'; 
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; 

去適當的location塊。你也可以在django上用django-cors-middleware(https://pypi.python.org/pypi/django-cors-middleware)或django-cors-headers(https://pypi.python.org/pypi/django-cors-headers)等中間件插件來做這件事。

+0

我上面嘗試,但現在我得到過原點參考相關的錯誤。我得到: 'XMLHttpRequest無法加載https://www.thiswebsideexample/api/thing。預檢的響應具有無效的HTTP狀態代碼403' 目前,我正在使用chrome exention CORS來啓用CORS。我需要把它放在應用程序的配置中嗎?我需要改變什麼? –

+0

編輯了我對如何解決CORS問題的迴應。 – 2ps

+0

我發現我們的網站不包括基本認證,只有基於會話的認證。你是否知道使用基於會話的身份驗證來訪問api的方法? 目前我無法更改django後端設置,因此我無法添加基本身份驗證選項。 –

1

你首先需要知道什麼樣的AuthenticationAuthorization是在服務器端,即什麼頭中的服務器查找認證/授權證書和由服務器所預期的格式來實現,然後發送標題項下的憑證。例如,如果在格式username::passwordAuthorization頭認證證書的服務器檢查,那麼你需要添加頁眉像

headers: {'Authorization': 'johndoe::password'} 
+0

有沒有辦法檢查服務器的要求? –

相關問題