0

也许 Django 1.5 最有趣的特性是custom user终于告别了过时的用户名。

文档中有一个很好的几乎开箱即用的示例来创建一个用户,您只需要电子邮件地址而不是用户名。

然而,有一个小警告。由于某种原因,在成功注册后,我无法自动登录用户,因为它可以按照此处的 Django 1.4 中的描述工作

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

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

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

根据开箱即用的示例,虽然没有定义自定义后端。只有一个 CustomUser 和 CustomUsermanager。因此我不明白为什么我不能手动登录用户。

顺便说一句,我还在设置中设置了以下内容:

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

这里有任何 Django 1.5 专家吗?

4

2 回答 2

1

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

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

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

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

于 2013-03-28T13:18:26.340 回答
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

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

于 2013-03-29T17:49:56.923 回答