我將我的Django應用程序部署到遠程服務器,但tastypie無法識別遠程服務器上的登錄用戶。Tastypie將登錄用戶識別爲AnonymousUser
我有一個過濾器屬於在當前登錄用戶的所有對象tastypie資源:
def apply_authorization_limits(self, request, object_list):
return object_list.filter(user=request.user)
當我嘗試做的端點對象的GET請求,我得到以下錯誤:
int() argument must be a string or a number, not 'AnonymousUser
我猜測是因爲登錄無法正常工作?
還是做了?在模板頁,我有以下代碼:
{% if user.is_authenticated %}
Logged in as <strong>{{ user.username }}</strong>
<a href="https://stackoverflow.com/users/logout">Logout</a>
{% else %}
<a href="https://stackoverflow.com/users/signup">Signup</a>
<a href="https://stackoverflow.com/users/login">Login</a>
{% endif %}
和代碼正確地顯示用戶的用戶名(這意味着該用戶已被認證)。會發生什麼?在我的本地服務器上,我能夠成功完成對tastypie API的所有HTTP請求,並且我不稱爲AnonymousUser,但在我的遠程服務器上,我被稱爲AnonymousUser to Tastypie
編輯: 當我有一個打印語句打印出request.user在任何視圖中,我得到正確的登錄用戶。當我在打印出request.user的Tastypie api.py中有打印語句時,我稱爲AnonymousUser。爲什麼我會被稱爲AnonymousUser而不是Tastypie的其餘部分?
編輯: 我使用以下驗證:
authentication = Authentication()
如果我改變了身份驗證ApiKeyAuthentication,那麼我將不得不張貼在每個GET/POST請求到資源的用戶名和API密鑰。這樣做的問題是,我將不得不創建一個新的中間視圖,查詢用戶名和視圖,然後對Tastypie端點執行GET/POST。有沒有另一種解決方案呢? 第二種方法是將用戶名和apikey嵌入到webapp中,並讓JS獲取這些值並將它們添加到GET/POST查詢字符串中,但這可能會導致安全問題。這將是一個安全問題,因爲如果用戶擁有自己的用戶名和api密鑰,用戶可以僞裝成另一個用戶。
你如何向'tastypie'發出請求?它是AJAX還是其他?什麼確切的URL在登錄時以及何時是匿名時請求?他們在完全相同的域名? – ilvar
我通過AJAX製作它們。如果用戶登錄或用戶是匿名的,則URLS是相同的。 Tastypie處理用戶登錄或未登錄的情況。請求來自同一個域。 – egidra
我幾乎可以肯定有些東西會阻止sessionid sookie到達服務器。看看您在Firebug(或網絡檢查員)的請求,他們是否包含sessionid cookie? – ilvar