とをrepoze.who
すべて削除して のデフォルト設定を無効にすると、 repoze.who を のミドルウェアとして設定できるようになります。base_config.sa_auth...
base_config.auth_backend
config/app_.cfg.py
config/middleware.py
だから私はこのようなファイルを作成しましたconfig/auth.py
:
from logging import getLogger
from repoze.who.middleware import PluggableAuthenticationMiddleware
from repoze.who.classifiers import default_challenge_decider, default_request_classifier
from repoze.who.plugins.basicauth import BasicAuthPlugin
from repoze.who.plugins.htpasswd import HTPasswdPlugin, plain_check
def add_auth(app):
htpasswd = HTPasswdPlugin('/.../htpasswd', plain_check)
authenticators = [('htpasswd', htpasswd)]
base_auth = BasicAuthPlugin('Inventory DB')
challengers = [('base_auth', base_auth)]
identifiers = [('base_auth', base_auth)]
mdproviders = []
log_stream = getLogger('auth')
app_with_mw = PluggableAuthenticationMiddleware(
app,
identifiers,
authenticators,
challengers,
mdproviders,
default_request_classifier,
default_challenge_decider,
log_stream,
)
return app_with_mw
ここで、plain_text パスワードはテストのためだけに使用されます。次に、config/middleware.py
この関数にインポートされapp
、関数の最後のステップとして適用されmake_app
ます。
from invdb.config.app_cfg import base_config
from invdb.config.environment import load_environment
from auth import add_auth
__all__ = ['make_app']
make_base_app = base_config.setup_tg_wsgi_app(load_environment)
def make_app(global_conf, full_stack=True, **app_conf):
app = make_base_app(global_conf, full_stack=True, **app_conf)
app = add_auth(app)
return app
問題は、認証が実際には機能しないことです。認証を必要としないコントローラはチャレンジしません。を持つコントローラーはallow_only = tg.predicate.not_anonymous
、http 認証に挑戦します。しかし、plain_check が返されたとしてもTrue
、ログインはすぐに忘れられ、チャレンジが再び表示されます。tg.request.identity
とどまりますNone
。
私は何を間違っていますか?