2

私が書いた次のデコレータを使用して、 bottle.py で HTTP 基本認証を実行しようとしています:

def check_auth(username, password):
if username == 'admin' and password == 'pass':
    return True
else:
    return False

def authenticate(msg_string = "Authenticate."):
response.content_type = "application/json"
message = {'message': msg_string}
resp = jsonpickle.encode(message)
response.status = "401 - Unauthorized"
response.headers['WWW-Authenticate'] = 'Basic realm="PyBit"'

return resp

def requires_auth(f):
def decorated(*args, **kwargs):
    print request.auth
    auth = request.auth
    if not auth: 
        return authenticate()
    elif not check_auth(auth[0],auth[1]):
        response.status = "401 - Unauthorized"
        return authenticate("HTTP Authentication Failed.")
    else:
        return f(*args, **kwargs)
return decorated

組み込みの wsgiref サーバーでは機能しますが、mod_wsgi を使用して Apache でアプリを実行すると機能しません。その場合、「auth」オブジェクトは常に「None」です。

Apacheはそれをつまんでいますか?

4

1 に答える 1

3

めったに。それを並べ替えました。認証ヘッダーはデフォルトでは通過しません。同等の HTTP 要求ヘッダーが存在する場合に、WSGI アプリケーション環境の HTTP_AUTHORIZATION 変数で、WSGI アプリケーションに HTTP 認証ヘッダーを渡すかどうかを制御するために、WSGIPassAuthorization ディレクティブを設定する必要があります。

于 2012-11-14T10:44:42.393 に答える