Django重定向快捷方式更改request.user

时间:2012-07-22 11:41:00

标签: django django-users

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

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

现在根据pdbrequest.userAppAccount调用之后是login()的实例,但request.user是第一个中的Django用户实例someOtherView行。

为什么重定向调用将User对象更改回普通的Django用户?我怎么能避免这个?

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

感谢。

1 个答案:

答案 0 :(得分:1)

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

这只是为什么将User子类化为一个坏主意的原因之一。相反,使用具有与User的OneToOne关系的UserProfile类扩展它。