2010-03-18 6 views
0

Я пытаюсь использовать implement my own authentication method for AuthKit и пытаюсь выяснить, как работают некоторые из встроенных методов. В частности, я пытаюсь выяснить, как правильно обновить REMOTE_USER для environ.Что делает этот код от AuthKit? (где определены эти функции и методы?)

Это то, как оно обрабатывается внутри 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 Словаря синтаксиса, но вполне возможно, что есть еще что-то действительно странное происходит здесь, что ISN» t сразу очевидный для кого-то как новый для Python как я.

ответ

1

Глядя на этот источник я вижу, у него есть (зло)

from paste.httpheaders import * 

, который является одним из способов иначе-мистический barenames может внезапно появиться в коде (и именно поэтому эта идиома очень, очень плохо практика). Я не могу быть уверен, что эти идентификаторы внезапно и необъяснимо материализуются, но это возможность.

+0

Похоже, это то, откуда оно взялось. Хотелось бы, чтобы я знал, почему для 'AUTH_TYPE.update (environ, 'basic')' казалось, что в то время было лучше, чем 'environ ['AUTH_TYPE'] = 'basic'' (что на самом деле меньше символов) –