Bottle アプリに「ベーシック認証(Basic Auth)」を追加する方法


✅ ステップ 1:認証ロジックを定義する

from bottle import request, HTTPResponse

# ユーザー名とパスワードを設定
USERNAME = "yourusername"
PASSWORD = "yourpassword"

def check_auth():
    auth = request.auth
    if auth is None or auth[0] != USERNAME or auth[1] != PASSWORD:
        return False
    return True

def require_basic_auth(func):
    def wrapper(*args, **kwargs):
        if not check_auth():
            return HTTPResponse(status=401, headers={'WWW-Authenticate': 'Basic realm="Login Required"'})
        return func(*args, **kwargs)
    return wrapper

✅ ステップ 2:保護したいルートにデコレーターを付ける

@route('/')
@require_basic_auth
def index():
    return "これは認証されたページです。"

✅ ステップ 3:Fly.io へデプロイ

Bottle アプリをそのまま flyctl deploy で Fly.io に再デプロイすれば OK です。


✅ 🔐 パスワードを安全にする方法(オプション)

.env ファイルを使って環境変数として管理し、Python で読み込むようにすることもできます:

# .env ファイル(git管理外にする)
BASIC_AUTH_USER=yourusername
BASIC_AUTH_PASS=yourpassword

Python 側で:

import os
from dotenv import load_dotenv
load_dotenv()

USERNAME = os.getenv("BASIC_AUTH_USER")
PASSWORD = os.getenv("BASIC_AUTH_PASS")

✅ 補足:特定ページのみ認証をかけたいとき

例えば /admin のみ保護し、トップページ / は誰でも見られるようにもできます。
ページごとに @require_basic_auth をつけるだけで実現可能です。


必要であれば .htpasswd のような Apache スタイル認証やセッション認証の追加も可能です。
もっと高度な認証が必要ですか?(例:ログインフォーム、JWTなど)それとも簡易的な Basic Auth で十分でしょうか?

タイトルとURLをコピーしました