django “如何”系列1:如何使用REMOTE_USER(远程用户)进行认证
这节主要介绍当web服务器使用了REMOTE_USER的时候,该如何在你的django应用中使用外部的认证源,远程用户主要见于企业内部网,主要使用单点登录解决方案。
在django中,REMOTE_USER在request.META中时有效的属性,如果你要在django中使用REMOTE_USER,请使用 RemoteUserMiddleware和 RemoteUserBackend这两个中间件
配置
在中间件列表中在django.contrib.auth.middleware.AuthenticationMiddleware之后加入django.contrib.auth.middleware.RemoteUserMiddleware
MIDDLEWARE_CLASSES = ( ... 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.RemoteUserMiddleware', ... )
认证后端使用RemoteuserBacken替代ModelBacken
AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.RemoteUserBackend', )
同个这个步骤,RemoteUserBacken这个中间件会检测在request.META['REMOTE_USER']中的用户名,并使用RemoteUserBacken去认证和自动登录这个用户名
注意
因为RemoteUserBacken是继承ModelBacken的,所以你还是有和ModelBacken一样的权限验证的
如果的认证机制使用了一个通用的HTTP而不是REMOTE_USER,你可以继承RemoteUserBacken然后设置一个header属性替代默认的request.META,例如:
from django.contrib.auth.middleware import RemoteUserMiddleware class CustomHeaderMiddleware(RemoteUserMiddleware): header = 'HTTP_AUTHUSER'
类讲解
class django.contrib.auth.backends.RemoteUserBackend
如果你需要更多自定义的控制,你可以继承这个类然后覆盖特定的部分
属性
这个类继承了ModelBacken,自定义的属性只有一个:
create_unknown_user:True 或者False,表示如果用户不存在数据库中,是否新建一个用户,默认为True
方法
clean_username(username):在获得或创建一个用户之前,清理这个用户名的信息,返回一个被清理后的用户名
configure_user(user):配置一个新创建的用户,这个方法在一个新用户被创建后立即调用来执行一个通用的配置动作,比如设置用户的组,返回一个用户对象。