Django:验证用户身份

时间:2016-10-19 16:11:55

标签: python django

我有以下代码:

#create user:

def create_user(request):
    if request.method == 'POST':
        user_info = forms.UserInfoForm(request.POST)
        if user_info.is_valid():
            cleaned_info = user_info.cleaned_data
            User.objects.create_user(username=cleaned_info['username'], password=cleaned_info['password'])
   render(.......)

这很有效。我可以查看auth_user,然后看到用户名和密码以及创建和添加的所有其他字段。

现在,我尝试使用上面的代码使用 username ='testcase'和password ='test'创建用户后,使用以下代码对用户进行身份验证:

#验证用户

def get_entry(request):
    if request.method == 'POST':
        user = authenticate(username='testcase', password='test')
        if user:
            .........

用户始终返回为none。到底是怎么回事?我正在运行django 1.10.2。

更新

我登录admin时可以看到create_user函数创建的用户。地位不是工作人员(按照预期的那样)。我将其更改为工作人员以查看是否导致问题,但仍然get_entry方法为用户提供了无。 这令人沮丧。我真的不知道我做错了什么。

2 个答案:

答案 0 :(得分:0)

将用户保存在一个var中,然后调用user.save(),因为User无法调用方法save()尝试:

def create_user(request):
        if request.method == 'POST':
            user_info = forms.UserInfoForm(request.POST)
            if user_info.is_valid():
                cleaned_info = user_info.cleaned_data
                user = User.objects.create_user(username=cleaned_info['username'], password=cleaned_info['password'])
                user.save()
       render(.......)

然后你需要在函数get_entry中调用auth.authenticate:

def get_entry(request):
    if request.method == 'POST':
        user = auth.authenticate(username='testcase', password='test')
        if user:
            .........

答案 1 :(得分:0)

您的代码似乎是正确的。

问题可能在于将参数传递到create_user视图的方式(Param传入get_entry视图极不可能是一个问题,因为参数username和{{ 1}}是硬编码的。

尝试打印passwordusername,然后再将其传递给password,因为User.objects.create_user()字段可能无法正确保存和/或正在传递空password,Django可能正在为空密码创建一个哈希值。

P.S。:这只是一个推测,需要您对此作出回应以进一步诊断问题。