【发布时间】:2019-04-09 01:29:45
【问题描述】:
我想为我的 Django 1.11 项目创建一个身份验证。如果请求包含标头:X_USERNAME,则将对用户进行身份验证。
我正在使用通用视图,所以我使用LoginRequiredMixin 来控制访问。
我制作了这个自定义身份验证类:
class CustomAuthentication:
def authenticate(self, request):
username = request.META.get('X_USERNAME')
logging.warning(username)
if not username:
return None
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
user = User(username=username)
user.is_staff = False
user.is_superuser = False
if request.META.get('X_GROUPNAME') == 'administrator':
user.is_staff = True
user.is_superuser = True
user.save()
return user, None
def get_user(self, user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
我在我的设置中添加了它:
AUTHENTICATION_BACKENDS = ['path.to.file.CustomAuthentication']
但我不能让它工作。我被重定向到不存在的/accounts/login/?next=。
提前致谢!
编辑:
我还尝试创建一个子类,如下所述:Django RemoteUser documentation,因为它看起来像我想要实现的目标:
class CustomAuthentication(RemoteUserMiddleware):
header = 'HTTP_X_USERNAME'
它给了我同样的结果。
【问题讨论】:
-
您是否尝试在
authenticate()方法中放置额外的日志语句以查看正在执行的代码路径? -
是的,我做到了,似乎从未调用过此函数。也许应该在登录页面中手动调用
authenticate()方法?这不是我想要的,因为我不想使用登录页面。
标签: python django authentication http-headers