我正在尝试implement my own authentication method for AuthKit并试图弄清楚一些内置方法是如何工作的。特别是,我正在尝试弄清楚如何正确更新REMOTE_USER
environ
。
这是authkit.authenticate.basic
内部的处理方式,但它非常令人困惑。我找不到定义REMOTE_USER
和AUTH_TYPE
的任何地方。这里有什么奇怪的事情,如果有的话,它是什么?
def __call__(self, environ, start_response):
environ['authkit.users'] = self.users
result = self.authenticate(environ)
if isinstance(result, str):
AUTH_TYPE.update(environ, 'basic')
REMOTE_USER.update(environ, result)
return self.application(environ, start_response)
实际上有许多像这样的大写字母,我找不到定义。例如,AUTHORIZATION
来自下方:
def authenticate(self, environ):
authorization = AUTHORIZATION(environ)
if not authorization:
return self.build_authentication()
(authmeth, auth) = authorization.split(' ',1)
if 'basic' != authmeth.lower():
return self.build_authentication()
auth = auth.strip().decode('base64')
username, password = auth.split(':',1)
if self.authfunc(environ, username, password):
return username
return self.build_authentication()
我觉得我可能错过了environ
dict的一些特殊语法处理,但是有可能在这里发生了一些非常奇怪的事情,这对于像Python这样新的人来说并不是很明显。自己。
答案 0 :(得分:1)
看着那个来源,我看到它有一个(邪恶的)
from paste.httpheaders import *
这是一种其他方式 - 神秘的昵称可能突然出现在代码中(这正是为什么这个成语是一个非常非常糟糕的做法)。我无法确定这些标识符是如何突然和莫名其妙地实现的,但这是一种可能性。