| 1 | class MyAuthenticationForm(BetterForm):
|
|---|
| 2 | """
|
|---|
| 3 | Base class for authenticating users. Extend this to get a form that accepts
|
|---|
| 4 | username/password logins.
|
|---|
| 5 | """
|
|---|
| 6 | username = forms.CharField(label=_("Username"), max_length=30)
|
|---|
| 7 | password = forms.CharField(label=_("Password"), widget=forms.PasswordInput)
|
|---|
| 8 |
|
|---|
| 9 | class Meta:
|
|---|
| 10 |
|
|---|
| 11 | fieldsets=((u'login',{'fields':('username','password'),'legend':'','description':_("Please, enter with your username and password:")}),)
|
|---|
| 12 |
|
|---|
| 13 | def __init__(self, request=None, *args, **kwargs):
|
|---|
| 14 | """
|
|---|
| 15 | If request is passed in, the form will validate that cookies are
|
|---|
| 16 | enabled. Note that the request (a HttpRequest object) must have set a
|
|---|
| 17 | cookie with the key TEST_COOKIE_NAME and value TEST_COOKIE_VALUE before
|
|---|
| 18 | running this validation.
|
|---|
| 19 | """
|
|---|
| 20 | self.request = request
|
|---|
| 21 | self.user_cache = None
|
|---|
| 22 | super(MyAuthenticationForm, self).__init__(*args, **kwargs)
|
|---|
| 23 |
|
|---|
| 24 | def clean(self):
|
|---|
| 25 | username = self.cleaned_data.get('username')
|
|---|
| 26 | password = self.cleaned_data.get('password')
|
|---|
| 27 |
|
|---|
| 28 | if username and password:
|
|---|
| 29 | self.user_cache = authenticate(username=username, password=password)
|
|---|
| 30 | if self.user_cache is None:
|
|---|
| 31 | raise forms.ValidationError(_("Please enter a correct username and password. Note that both fields are case-sensitive."))
|
|---|
| 32 | elif not self.user_cache.is_active:
|
|---|
| 33 | raise forms.ValidationError(_("This account is inactive."))
|
|---|
| 34 |
|
|---|
| 35 | # TODO: determine whether this should move to its own method.
|
|---|
| 36 | if self.request:
|
|---|
| 37 | if not self.request.session.test_cookie_worked():
|
|---|
| 38 | raise forms.ValidationError(_("Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."))
|
|---|
| 39 |
|
|---|
| 40 | return self.cleaned_data
|
|---|
| 41 |
|
|---|
| 42 | def get_user_id(self):
|
|---|
| 43 | if self.user_cache:
|
|---|
| 44 | return self.user_cache.id
|
|---|
| 45 | return None
|
|---|
| 46 |
|
|---|
| 47 | def get_user(self):
|
|---|
| 48 | return self.user_cache
|
|---|