通过设置的REMOTE_USER环境变量来认证,即服务器完成了认证。(通过request.META["REMOTE_USER"])
MIDDLEWARE_CLASSES = (
'...',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.RemoteUserMiddleware',
'...',
)
默认的AUTHENTICATION_BACKENDS需要替换为RemoteUser形式的
AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',)
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.RemoteUserBackend',
)
直接拿request.META['REMOTE_USER']中的用户名并自动认证。注意,这样之前的认证方式就不能用了,可以在tuple中加上ModelBackend,这样在RemoteUser失败的情况可以使用之前的认证方式。
而django命令行的createsuperuser产生的用户一直都是ModelBackend的。
如果你的认证系统使用的不是REMOTE_USER这个环境变量,可以通过继承RemoteUserMiddleware并设置header来使用。
from django.contrib.auth.middleware import RemoteUserMiddleware
class CustomHeaderMiddleware(RemoteUserMiddleware):
header = 'HTTP_AUTHUSER'
RemoteUser要求每个请求都得带REMOTE_USER,也可以使用PersistentRemoteUserMiddleware这样可以维持认证session。