﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
35971	RemoteUserMiddleware needs a get_username method	Adrien Kunysz		"As currently implemented, the only way to customise how RemoteUserMiddleware gets the username is through the ""header"" variable. This is then used in __call__ and __acall__ methods like this:

{{{
            username = request.META[self.header]
}}}

It would be convenient to move that logic into a separate method that could be overridden. For example:
{{{
get_username(self, request, header_name):
    return request.META[header_name]    
}}}

Specific use case: the proxy I have in front of Django always sets two specific headers (say ""X-Username"" and ""X-Authenticated""). The value of ""X-Username"" is only valid if ""X-Authenticated"" is ""true"", otherwise it should be ignored (typically it ends up being a single space character). I use PersistentRemoteMiddleware to use X-Username but the only way I found to ignore it when X-Authenticated is not true is to override __call__ / __acall__ , which seems rather fragile while a small change to RemoteUserMiddleware would make for a much more robust, flexible and maintainable solution.

With the proposed change, in my child class I could just say
{{{
def get_username(self, request, header_name):
    if request.META[""X-Authenticated""].lower() != ""true"":
        raise KeyError
    return request.META[header_name]
}}}

I am happy to propose a patch if we can agree this change is desirable.

The analysis above is for the latest version on github. I have marked this feature request as 5.0 because that's the version I currently use and backporting the proposed change seems easy enough."	New feature	new	contrib.auth	5.0	Normal			Adrien Kunysz	Unreviewed	0	0	0	0	0	0
