我正在使用Django的自定义身份验证后端(运行couchdb).我有一个自定义用户模型.
作为登录的一部分,我正在做一个request.user = user并在会话中保存用户ID.但是,在后续请求中,我无法检索request.user.它始终是AnonymousUser.但是,我可以从会话中检索用户ID,并确认正确设置了会话cookie.
我错过了什么?
我不想使用关系数据库,因为我想在couchdb中维护我的所有用户数据.
编辑:我写了一个不从Django的auth用户继承的类.但它具有用户名和电子邮件属性.出于这个原因,我的后端不会返回一个派生自auth User的类.
在django REST框架中,身份验证中间件仅在执行视图中间件之后才在请求中设置用户对象,而在此之前执行任何自定义中间件。是否有某种方法可以更改此顺序并在通过身份验证中间件设置用户对象之后执行自定义中间件
作为替代方案,我在中间件本身中创建了用户对象,它可以正常工作,但这只是一个hack。
common.py中定义的中间件是:
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'application.middlewares.IPsBlockerMiddlewareHook',
'application.middlewares.UserMiddleware',
]
Run Code Online (Sandbox Code Playgroud)
有问题的自定义中间件是UserMiddleware。我需要在身份验证后执行它,但事实并非如此