如何在使用自定义登录时注册后手动验证用户?

时间:2013-03-24 15:21:06

标签: django django-authentication django-1.5

Django 1.5最有趣的功能可能是custom user最终告别了过时的用户名。

文档中有一个非常好的out-of-the-box example用于创建用户,您只需要使用电子邮件地址而不是用户名。

然而,有一点需要注意。在成功注册后出于某种原因,我无法自动登录用户,因为它会像here中的Django 1.4中所描述的那样工作

换句话说,这对我不起作用:

user = authenticate(username=form.cleaned_data['email'], password=form.cleaned_data['password2'])
login(request, user)

奇怪的是,我甚至没有在调试控制台中收到任何错误消息,也没有任何警告。

根据out-of-the-box example,虽然没有定义自定义后端。只有CustomUser和CustomUsermanager。因此我不明白为什么我不能手动登录用户。

btw我还在设置中设置了以下内容:

AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',)

这里有任何Django 1.5专家吗?

2 个答案:

答案 0 :(得分:1)

我只是自己运行了这个例子,它确实有效。

在运行 syncdb 之前,您是否设置了 AUTH_USER_MODEL

如果没有,请擦除您的数据库并再次运行该命令。根据链接的示例,如果一切配置正确,它应该在创建超级用户时询问您的出生日期。

顺便说一下, ModelBackend 是默认的 AUTHENTICATION_BACKENDS ,你不必设置它。

答案 1 :(得分:0)

我终于找到了解决方案。在内部django类中调试之后。解决方案简直令人尴尬。

user = authenticate(username=form.cleaned_data['email'], password=form.cleaned_data['password2'])
login(request, user)

我的错误是login(request, user)

错误的命名空间

确保您正在使用

from django.contrib.auth import login

而不是错误的:

from django.contrib.auth.views import login

我的设置中其他一切都是正确的。