AI任せのWeb開発奮闘記【第95話】パスワード問題に挑む!再び試される開発の基本

TAKA:
「老師、またやっちゃいましたよ……ログインができません。何が悪いのか全然わかりません!」

AI老師:
「おぬし、まず冷静に状況を整理するのじゃ。ログインできない理由は大抵、パスワード管理かデータベースの設定に問題がある。さて、どういうエラーが出た?」

TAKA:
「エラーは『DuplicateKeyError』です。どうもユーザーを作ろうとしたら、既に存在していると言われて……。」

AI老師:
「ほう、良い着眼点じゃ。つまり、データベースにはすでに同じユーザー名やメールアドレスが登録されているのじゃな?その状態で新しいユーザーを追加しようとした結果、MongoDBが弾いたわけじゃ。」

TAKA:
「たしかに。じゃあ、新しいユーザーを追加すればいいんですよね?」

AI老師:
「その通り。ただ、今回の課題はもっと根本的じゃ。重複しないデータを追加する方法や、既存のデータを活用する設計を学ぶのが目的じゃぞ。重複したエラーに対処する方法を実践しつつ、スクリプトを見直していこうか。」

  1. スクリプト修正:重複チェックを追加

AI老師:
「まず、ユーザーを追加する前に、データベースに同じメールアドレスやユーザー名が存在するかをチェックするのじゃ。」

TAKA:
「わかりました!こんな感じでいいですか?」

from pymongo import MongoClient
from werkzeug.security import generate_password_hash
from dotenv import load_dotenv
import os

load_dotenv()

client = MongoClient(os.getenv(‘MONGODB_URI’))
db = client[‘my-video-finder’]
users = db[‘users’]

新しいユーザー情報

new_user = {
‘username’: ‘testuser02’, # ユーザー名を変更
‘email’: ‘testuser02@test.com’, # メールアドレスを変更
‘password’: generate_password_hash(‘password02’) # パスワードを設定
}

重複チェック

existing_user = users.find_one({‘$or’: [{‘username’: new_user[‘username’]}, {‘email’: new_user[‘email’]}]})
if existing_user:
print(f”User already exists: {existing_user}”)
else:
users.insert_one(new_user)
print(“User created successfully”)

AI老師:
「うむ、良いぞ。find_one で重複データを探しておるな。これで新しいユーザーが安全に追加できるようになる。」

  1. パスワード確認:正しいハッシュ化をチェック

TAKA:
「ユーザーは登録できるようになったみたいですが、ログインがまだうまくいきません……。」

AI老師:
「ログイン処理のデバッグログはどうなっておる?」

TAKA:
「えーっと、こんな感じです。」

User data found for email testuser01@test.com
Stored password hash: pbkdf2:sha256:…
Password provided: password01
Login failed for email testuser01@test.com

AI老師:
「ほう、ハッシュ化されたパスワードが正しく保存されておるな。しかし、check_password_hash の結果が失敗しておるのは、平文のパスワードが間違っている可能性が高い。」

  1. デバッグで問題を洗い出す

TAKA:
「老師、もしかして私がcreate_user.pyで使ったパスワードが間違っているかもしれません!」

AI老師:
「その通りじゃ。登録時のパスワードと、ログイン時のパスワードが一致しているか再確認するのじゃ。登録時に使ったcreate_user.pyのスクリプトをもう一度確認してみよ。」

TAKA:
「たしかに、登録時は password01 と書いたつもりだったんですけど……ログイン時には password02 を入れていました。」

AI老師:
「それでは一致するはずがない!開発者は入力データに注意深くなるべきじゃ。もう一度正しいパスワードで試してみるのじゃ。」

  1. 最終確認:ログイン成功

TAKA:
「老師!正しいパスワードでログインしたら、ようやく成功しました!これでようやくエラー地獄から脱出です!」

AI老師:
「ふむ、良い学びじゃったな。今回の経験で得たことをまとめておこう。」
今回の学び

重複チェックの重要性
    データベースに新しいデータを追加する際は、事前に重複データがないか確認する。
パスワードのハッシュ化と一致チェック
    パスワードはハッシュ化して保存し、ログイン時には正しいハッシュ関数で比較する。
デバッグログの活用
    ログを活用して、どの処理で失敗しているかを正確に特定する。
ミスを楽しむ心
    開発は試行錯誤の連続。ミスを恐れず挑む姿勢が成功のカギ。

TAKA:
「老師、今夜も本当にありがとうございました。次の課題もお願いします!」

AI老師:
「ふふ、では次はもう少し高度な機能に挑むとしよう。引き続き精進するのじゃぞ!」

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です