【问题标题】:How to stop Django PasswordInput prefilling form如何停止 Django PasswordInput 预填表单
【发布时间】:2020-04-03 16:07:51
【问题描述】:

我正在尝试创建一个 django 表单以允许用户登录。

forms.py

class LoginForm(forms.ModelForm):
    username = forms.CharField(label='User name', max_length=30)
    password = forms.PasswordInput()

    class Meta:
        model = User
        fields = '__all__'    
        widgets = {'password': forms.PasswordInput()}

views.py

def login_view(request):
    form_context = {'login_form': LoginForm,}
    url = "users/login.html"
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username, password=password)
        ...
    else:
        context = form_context
    return render(request, url, context)

login.html

<form method="post" action="{% url 'login' %}">
{% csrf_token %}
    <table>
        <tr>
            <td>{{ login_form.username.label_tag }}</td>
            <td>{{ login_form.username }}</td>
            <td rowspan="2"><button type="submit" class="btn btn-success">Login</button></td>
        </tr>
        <tr>
            <td>{{ login_form.password.label_tag }}</td>
            <td>{{ login_form.password }}</td>
        </tr>
    </table>
</form>

我遇到的问题是,如果行

widgets = {'password': forms.PasswordInput()}

使用,则表格中会预先填写用户名和密码

如果该行被注释掉,表格不会被预填,但是密码是纯文本的。

这里有什么问题?

【问题讨论】:

  • 那是你浏览器的问题。用户可以打开或关闭此功能。您为什么不希望您的用户在表单中预先填写他们的凭据,以便他们可以快速登录?只有当您让浏览器(或密码管理器)存储您的密码时才会发生这种情况。
  • 所以:不要这样做,它会降低您网站的安全性,因为您实际上是在要求用户选择一个易于输入、易于记忆的密码。

标签: django django-forms


【解决方案1】:

您只需要关闭自动完成功能:

password = forms.PasswordInput(widget=forms.TextInput(attrs={'autocomplete':'off'}))

或为表单禁用它:

<form method="post" action="{% url 'login' %}" autocomplete="off">

【讨论】:

  • 获得想要使用安全密码(每个网站的密码不同)但不知道密码的用户投诉的可靠方法。即让用户为您的网站选择错误密码的可靠方法。
  • 告诉 OP?我只是在回答问题。
  • 我知道,但有这样的建议:不要那样做!在这里会有帮助。这对网络的安全性不利。幸运的是,密码管理器现在开始忽略 BS 的自动完成功能。
  • 手动输入密码比使用密码自动填充更安全吗?
  • 我已经接受了答案。明明在这里开了一罐虫子
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-20
  • 2020-11-08
  • 1970-01-01
  • 2010-10-06
  • 2012-08-14
  • 2010-10-30
相关资源
最近更新 更多