在Django中添加auth验证

时间:2011-04-10 08:45:47

标签: django authentication

我有一个django应用程序,我想添加自己的auth验证并检查用户是否已过期(检查我的某些模型的过期日期)。如果用户过期,我想在登录页面中引发ValidationError,并显示相应的消息。最好的方法是什么?

谢谢,Alex

1 个答案:

答案 0 :(得分:2)

如果您真的想要进行自己的自定义身份验证,则应阅读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}),

我现在看到你的问题最初声明你想要自定义验证,而不是身份验证。对于没有正确阅读你的问题,我表示道歉。