【发布时间】:2014-12-02 03:57:31
【问题描述】:
我正在尝试制作基于子域等为用户更改某些字段的中间件...
唯一的问题是 request.user 在中间件中总是以 AnonymousUser 的形式出现,但在视图中却是正确的用户。我在设置中保留了 django 使用的默认身份验证和会话中间件。
这里有一个类似的问题:Django, request.user is always Anonymous User 但并没有过度回答整个问题,因为我没有使用不同的身份验证方法,并且 djangos 身份验证在我调用自己的中间件之前运行。
在使用 DRF 时,有没有办法在中间件中获取 request.user?我将在这里展示一些示例代码:
class SampleMiddleware(object):
def process_view(self, request, view_func, view_args, view_kwargs):
#This will be AnonymousUser. I need it to be the actual user making the request.
print (request.user)
def process_response(self, request, response):
return response
使用 process_request:
class SampleMiddleware(object):
def process_request(self, request):
#This will be AnonymousUser. I need it to be the actual user making the request.
print (request.user)
def process_response(self, request, response):
return response
【问题讨论】:
-
中间件的顺序很重要。确保身份验证中间件在设置中列在您的前面
-
我已经将它包含在中间件的末尾,在 django 运行了它的默认值之后。 (Auth 和 Session 的)
-
这里一定有其他事情发生,一些你没有发布的额外代码。
-
嘿,是的,对不起,我在 process_request 和 process_view 之间切换。现在更新了。
-
django 版本?你怎么做授权?也发布 MIDDLEWARE_CLASSES 设置。
标签: python django django-rest-framework