2010-03-18 49 views
0

我正在嘗試implement my own authentication method for AuthKit,並試圖弄清楚一些內置方法是如何工作的。特別是,我試圖找出如何正確更新environREMOTE_USERAuthKit的這段代碼是做什麼的? (這些函數和方法在哪裏定義的?)

這是如何處理authkit.authenticate.basic內部,但它很混亂。我找不到任何地方REMOTE_USERAUTH_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字典,但它有可能還有別的東西很奇怪的事情在這裏,ISN」對於像我自己一樣新興Python的人來說,這一點顯而易見。

回答

1

望着那源頭我看到它有一個(惡)

from paste.httpheaders import * 

這是一種方式,否則,神祕barenames可能會突然出現在代碼(這也正是這個成語是一個非常,非常糟糕實踐)。我不能確定這些標識符是如何突然且難以理解地實現的,但這是一種可能性。

+0

看起來就像它是從哪裏來的。我希望我知道爲什麼'AUTH_TYPE.update(environ,'basic')'在當時似乎優於'environ ['AUTH_TYPE'] ='basic''(這實際上是少些字符) – 2010-03-18 04:12:06

相關問題