0

我有一个应用程序,我们将 Django 'User' 对象细分为具有附加属性的 'AppAccount' 对象。现在我有一个视图,我可以在其中执行以下操作:

appAccountObject.backend = 'django.contrib.auth.backends.ModelBackend'
login(request, appAccountObject) 
redirect(someOtherView) 

现在根据pdb,request.user是调用AppAccount后的一个实例,但在 的第一行是一个 Django User 实例。login()request.usersomeOtherView

为什么重定向调用将用户对象更改回普通的 Django 用户?我怎样才能避免这种情况?

另外,上面的代码正确吗?添加backend属性是否可以绕过对 的调用authenticate?如果不是,那么正确的方法应该是什么:我想自动登录用户,没有他们的凭据,然后重定向到另一个由@login_required装饰器包装的视图。

谢谢。

4

1 回答 1

1

重定向会导致来自用户浏览器的全新请求,因此必须根据会话 cookie 再次从数据库中获取用户对象并分配给request.user. 这发生在身份验证中间件中。除非您编写了自己的版本,否则它将始终使用默认用户类。

这只是对 User 进行子类化是个坏主意的原因之一。相反,使用与 User 具有 OneToOne 关系的 UserProfile 类对其进行扩展。

于 2012-07-22T11:50:08.573 回答