Django自定义登录从不验证为什么?

2024-10-02 22:34:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个自定义登录表单。以下是我目前所掌握的情况。我的问题是,无论我做什么登录永远不会验证。即使我有正确的电子邮件和密码,我总能收到:

请输入正确的用户名和密码。请注意,这两个字段都可能区分大小写。

我想是因为我在查邮件和密码。在

这是我的表格。*

class EmailAuthenticationForm(AuthenticationForm):
    username = forms.EmailField(label=_('Email Address'))
    redirect_url = forms.CharField(
        widget=forms.HiddenInput, required=False)

    def __init__(self, host=None, *args, **kwargs):
        self.host = host
        super(EmailAuthenticationForm, self).__init__(*args, **kwargs)

这是我的观点

^{pr2}$

Tags: selfhost密码表单init电子邮件邮件情况
2条回答

是的,这可以非常容易地完成首先创建一个身份验证后端:

后端.py

from django.contrib.auth import get_user_model


class EmailAuthBackend(object):
    """
    Email Authentication Backend
    """

    def authenticate(self, username=None, password=None):
        """ Authenticate a user based on email address as the user name. """
        try:
            user = get_user_model().objects.get(email=username)
            if user.check_password(password):
                return user
        except get_user_model().DoesNotExist:
            return None 

然后在设置.py:

^{pr2}$

最后确保您的表单具有电子邮件字段:

<form action="." method="post">
  {% csrf_token %}
  <input type="hidden" name="next" value="{{ next }}" />
  {{ form.non_field_errors }}
  {% for field in form %}
    <div class="field-wrapper">
      <div class="label-wrapper">
        {% if field.name == "username" %}
          Email address
        {% else %}
          {{ field.label_tag }}
        {% endif %}
        {% if field.field.required %}<span class="required">*</span>{% endif %}
      </div>
      <div class="value-wrapper">
        {{ field }}
        {{ field.errors }}
      </div>
    </div>
  {% endfor %}
  <div class="submit-wrapper">
    <input type="submit" value="Sign In" />
  </div>
</form>

Django有一个Full Example来演示如何进行自定义身份验证。在

相关问题 更多 >