【发布时间】:2016-10-19 16:11:55
【问题描述】:
我有以下代码:
#创建用户:
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:
.........
用户始终返回为无。到底是怎么回事?我正在运行 django 1.10.2。
更新:
当我登录管理员时,我可以看到由 create_user 函数创建的用户。状态不是员工(因为它应该是)。我将其更改为人员以查看是否导致问题,但 get_entry 方法仍然没有为用户产生任何结果。 这令人沮丧。我真的不知道我做错了什么。
【问题讨论】:
-
我没有。我认为 create_user() 方法会在后台处理该问题。而且因为我可以看到在 auth_users 中创建的用户,所以它被保存了。我不知道 .save() 方法在后台是否还有什么作用。
-
尝试插入存储在 auth_user 表的密码属性中的散列密码,而不是测试。
-
authenticate 在进行任何比较之前自动对密码进行哈希处理。我认为不需要散列。
-
尝试使用另一种方式创建的用户测试
get_entry方法,并尝试使用使用create_user方法创建的用户登录其他地方(例如 Django 管理员)(您必须设置is_staff=True)。这样您就可以确定哪些视图不起作用。 -
您使用的是默认用户模型吗?您能否确认您已将
AUTHENTICATION_BACKENDS设置为django.contrib.auth.backends.ModelBackend。这是默认设置的,但可以确保。from django.conf import settings然后print(settings.AUTHENTICATION_BACKENDS)docs ........