在Django应用程序中创建新用户时,我需要使用set_unusable_password()吗?

时间:2019-04-30 11:14:40

标签: python django django-models django-forms

我有一个使用活动目录对用户进行身份验证的应用程序。这意味着无需在我们的应用程序数据库中存储密码。我们将每个用户的详细信息(例如用户名等)存储在应用程序数据库的用户表中。

我正在努力实现允许用户添加到应用程序的功能。我正在使用ModelForm生成表单。

模型形式如下:

class GeminiUserAccessForm(ModelForm):
    class Meta:
        model = GeminiUser
        fields = ['email', 'is_authorised']
        labels = {
            'is_authorised': 'Is authorised?'
        }

视图中用于处理来自表单页面的请求的方法:

def manage_user_access_view(request):
    template_name = 'gemini_users/manage_access.html'
    if request.method == 'POST':
        form = GeminiUserAccessForm(request.POST)
        if form.is_valid():
            new_user = form.save()
            pass
    else:
        form = GeminiUserAccessForm()

    return render(request, template_name, {'form': form})

一切正常,具有给定电子邮件地址和授权值的用户将保存到数据库中。密码为空。

在保存用户之前,我还需要使用set_unusable_password()吗?

1 个答案:

答案 0 :(得分:0)

这是一种很好的形式,并且具有深度安全性,以防万一有人出于某种原因启用了在password字段中查看的身份验证。

set_unusable_password()调用make_password(None),并返回

UNUSABLE_PASSWORD_PREFIX + get_random_string(UNUSABLE_PASSWORD_SUFFIX_LENGTH)

password is None时,即密码散列永远不会被任何现成的散列算法视为有效。