我有一個django應用程序,我想添加自己的auth驗證並檢查用戶是否過期(檢查我的某些模型的過期日期)。如果用戶過期,我想在適當的消息中在登錄頁面中引發ValidationError。什麼是最好的方式來做到這一點?在Django中添加auth驗證
謝謝,亞歷克斯
我有一個django應用程序,我想添加自己的auth驗證並檢查用戶是否過期(檢查我的某些模型的過期日期)。如果用戶過期,我想在適當的消息中在登錄頁面中引發ValidationError。什麼是最好的方式來做到這一點?在Django中添加auth驗證
謝謝,亞歷克斯
如果你真的想這樣做你自己的自定義身份驗證,則應該在Django文檔閱讀custom backends。
雖然你可能不想自己做。它很爛。真。除非真的有很好的理由,否則你應該避免自己的認證。主要原因是,如果你不使用內置的用戶模型,許多Django應用程序停止工作。如果您需要對現有源進行身份驗證,那麼這是創建自己的後端的有效原因。但是有些陷阱,你仍然可能想要爲你的自定義後端使用內置的用戶模型。
您應該告訴我們您爲什麼要進行自己的自定義身份驗證,也許我們可以幫助您實現自己的要求,而無需編寫自定義後端。
編輯
好吧,我想我明白你的意思了。你想要什麼(我認爲)是一種自定義身份驗證表單。我們目前使用自定義表單(儘管我們有不同的不可避免的後端),所以你應該能夠很容易地使用以下內容。
from django.contrib.auth.forms import AuthenticationForm
from django import forms
from myproject.myapp.models import MyClass
class CustomAuthForm(AuthenticationForm):
def clean(self):
cleaned_data = super(CustomAuthForm, self).clean()
user = self.user_cache # set by super class
if user.my_class.expired:
raise forms.ValidationError('This User has Expired!')
return cleaned_data
然後,使用這個定製驗證表單,你需要在你urls.py
網址:
from myproject.myapp.forms import CustomAuthForm
url(r'^login/$', 'django.contrib.auth.views.login', name='login',
kwargs={'template_name':'youproject/login.html', 'authentication_form':CustomAuthForm}),
我現在是你的問題本來規定你想自定義的驗證,沒有驗證,請參閱。我的道歉沒有正確地讀你的問題。
django.contrib.auth在哪裏缺少你所需要的? – jbcurtin 2011-04-10 09:02:12
我需要檢查我的某個模型中的過期日期,並在用戶嘗試登錄時過期並給出相應的錯誤。 – alexarsh 2011-04-10 09:56:09
好的,通常它是在使用auth模塊的應用程序視圖中完成的。另一種方法是創建一個可以覆蓋objects.get()並執行檢查的管理器。擴展認證模塊的唯一主要好處是你已經有了一個經過測試和工作的cookie驗證實現,它已經支持你所需要的。看看這裏一些額外的閱讀:http://docs.djangoproject.com/en/dev/topics/http/sessions/#using-sessions-in-views – jbcurtin 2011-04-10 20:41:38