from passlib.context import CryptContext # bcryptアルゴリズムを使用してパスワードをハッシュ化 pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") def _truncate_password(password: str) -> str: """bcryptの72バイト制限に対応するためパスワードを切り詰める""" # UTF-8エンコードして72バイトに制限 password_bytes = password.encode('utf-8') if len(password_bytes) > 72: password_bytes = password_bytes[:72] return password_bytes.decode('utf-8', errors='ignore') def verify_password(plain_password: str, hashed_password: str) -> bool: """平文のパスワードとハッシュ化されたパスワードを比較する""" truncated_password = _truncate_password(plain_password) return pwd_context.verify(truncated_password, hashed_password) def get_password_hash(password: str) -> str: """パスワードをハッシュ化する""" truncated_password = _truncate_password(password) return pwd_context.hash(truncated_password)