I have write a new authentication backend for my django project but i cannot show error messages in output when username or password is incorrect.
Here is my authenticate function code :
def authenticate(self,username=None,password=None ):
try:
authService = AuthenticationLocator().getAuthenticationHttpSoap11Endpoint()
authRequest = authenticateRequest()
authRequest._Username = username
authRequest._Password = password
authResult = authService.authenticate(authRequest)
if authResult._return[0] == 'true':
try:
user = User.objects.filter(username=username)
if len(user) > 0:
usr = user[0]
else:
usr = self.addUser(username)
# Correct Login
return usr
except User.DoesNotExist:
return None
elif authResult._return[0] == 'error':
# Connection Error
return None
elif authResult._return[0] == 'false':
# InCorrect User
return None
except :
return None
def get_user(self, user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
I don't know what should I code when I have an incorrect username and password.
and my login template is like this :
{% block content %}
{% if error_message %}
<p class="errornote">{{ error_message }}</p>
{% endif %}
<div id="content-main">
<form action="{{ app_path }}" method="post" id="login-form">
{{ form.non_field_error }}
{% csrf_token %}
<div>
{{ message }}
</div>
<div class="form-row">
<div class="form_cell"><label for="id_username">{% trans 'Username:' %}</label></div>
<div class="form_cell"><input type="text" name="username" id="id_username" /></div>
</div>
<div class="form-row">
<div class="form_cell"><label for="id_password">{% trans 'Password:' %}</label></div>
<div class="form_cell"><input type="password" name="password" id="id_password" /></div>
<input type="hidden" name="this_is_the_login_form" value="1" />
</div>
<div class="submit-row">
<label> </label><input type="submit" value="{% trans 'Log in' %}" />
</div>
</form>
<script type="text/javascript">
document.getElementById('id_username').focus()
</script>
</div>
{% endblock %}
Please help me as soon as possible ;-)
THNX Mohammad
You need to save error in your authentication backend:
def authenticate(self,username=None,password=None,errors=[]):
...
errors.append('Connection error.')
And write your AuthenticationForm as in django.contrib.auth.forms with modification of clean method:
def clean(self):
...
errors = []
self.user_cache = authenticate(username=username, password=password, errors=errors)
...
raise form.ValidationError(" ".join(errors))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With