3

我已经为我的 django 项目编写了一个新的身份验证后端,但是当用户名或密码不正确时,我无法在输出中显示错误消息。

这是我的身份验证功能代码:

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

当我的用户名和密码不正确时,我不知道应该编码什么。

我的登录模板是这样的:

{% 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>&nbsp;</label><input type="submit" value="{% trans 'Log in' %}" />
        </div>
    </form>
<script type="text/javascript">
document.getElementById('id_username').focus()
</script>
</div>
{% endblock %}

请尽快帮助我;-)

THNX 穆罕默德

4

1 回答 1

5

您需要在身份验证后端保存错误:

def authenticate(self,username=None,password=None,errors=[]):
    ... 
    errors.append('Connection error.')

并在 django.contrib.auth.forms 中编写您的 AuthenticationForm 并修改 clean 方法:

def clean(self):
    ...
    errors = []
    self.user_cache = authenticate(username=username, password=password, errors=errors)
    ...
    raise form.ValidationError(" ".join(errors))
于 2012-12-22T15:31:59.497 回答