Что делает этот код от Authkit? (Где определяются эти функции и методы?)
Вопрос
я пытаюсь Внедрить мой собственный метод аутентификации для 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
Дикт, но вполне возможно, что здесь есть что -то еще странное, что не сразу очевидно для того, как новичок в Python, как и я.
Решение
Глядя на этот источник, я вижу, у него есть (зло)
from paste.httpheaders import *
Это один из способов, которые, в противном случае, в коде, могут внезапно появиться в коде (именно поэтому эта идиома очень, очень плохая практика). Я не могу быть уверен, что именно эти идентификаторы внезапно и необъяснимым образом материализуются, но это возможно.