我有一個寬鬆的使用django.contrib.auth.decorators.login_required()
也django.views.decorators.http.require_http_methods()
Django應用程序。前者是檢查當前用戶是否登錄在一個裝飾,和將它們導向它(與代碼302,這個)到如果在沒有登錄的登錄頁面。後者是其中檢查該請求方法的裝飾,並返回405(方法如果方法不在傳入列表中,則不執行)。因此,作爲一個例子,一個視圖功能可能看起來像:進行自定義HTTP身份驗證和方法時,正確的操作順序是什麼?
@require_http_methods(["GET", "POST", "DELETE"])
@login_required
def my_view(request):
...
這裏的問題:很多的這些看法做內部權限檢查,如果用戶缺少對資源足夠的權限,它會返回403(禁止)。根據我的研究,這是不好的,因爲403需要發生之前檢查方法是否正確。但是,如果沒有login_required()
,我必須在我的視圖中打開代碼用戶檢查。
有其他人的經驗?有沒有正確的答案?我知道這是作弊,但檢查方法,然後做登錄重定向,然後檢查用戶權限,還是需要重構這些視圖是不可接受的?
每個視圖所需的權限完全是特定於視圖的。中間件不是合適的地方,裝飾者也不是。我需要登錄的用戶,我需要確信用戶確實存在,我必須在* login_required之後*,或者登錄重定向自己。 – Corbin 2012-01-07 00:17:32
我只是在中間件中實現登錄重定向 - 然後你可以做任何事後想要的認證(在中間件或視圖中)。 – dgel 2012-01-07 00:26:32
由於中間件始終運行,但大多數視圖不需要登錄,所以不會出現問題嗎? – Corbin 2012-01-07 00:29:52