✅ ステップ 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 で十分でしょうか?