1
連接到服務器的Django我們有這個設置:允許同一用戶從客戶端Angular2和其他Django的服務器
- 中央Django的服務器,CSRF和登錄啓用。除登錄之外,如果沒有先前登錄,可能不會執行任何操作。
- 一個Angular2客戶端,它幾乎可以將每個呼叫都連接到中央服務器。中央服務器上的登錄從此處執行。 CSRF令牌可用且身份驗證正常。
- 另一個需要文件的小型服務器。它也是Django,但不支持CSRF。客戶端將文件發送到中央服務器可能永遠不會擁有或甚至看不到的服務器。文件上傳(使用表單數據和POST)工作正常。但是,文件上傳完成後,我們希望這個小型服務器調用中央服務器,通知它上傳成功。
問題是最後一步。中央服務器拒絕通話,表示我們需要登錄。我們能否以任何方式讓中央服務器相信請求來自使用Angular2客戶端登錄的用戶?我們如何設置CSRF令牌?我們將他在客戶端獲得的用戶CSRF令牌發送給小型服務器。
我們正在使用python-requests庫,Python 3和Django 1.10。 這是我們目前擁有的小型服務器上的代碼:我認爲問題是「頭」的定義
url = settings.CENTRAL_SERVER_URL + 'path/to/endpoint'
# 'request' is the original request object from the Angular2 client
token = get_token(request)
# Call to 'post' results in error code in response ('not logged in')
response = requests.post(url, data=data, headers={'X-CSRFToken': token, 'Referer': url})
。它可以完成嗎?
(CSRF啓用=使用CsrfViewMiddleware)