パスワードリセット機能の実装に四苦八苦
今回は、ユーザー認証システムの重要な機能の一つであるパスワードリセット機能の実装に挑戦することになった。しかし、その道のりは想像以上に険しいものとなった…
TAKA: 「よし、サインアップ機能は完成したぞ。次はパスワードリセット機能か…まあ、AI老師に聞けば簡単だよね」
AI老師: 「まずは必要な設定を確認するのじゃ。Gmailのアプリパスワードの設定は済んでいるかね?」
TAKA: 「え?アプリパスワード?普通のパスワードじゃダメなんですか?」
AI老師: 「セキュリティの観点から、Gmailでは2段階認証とアプリパスワードの設定が必要なのじゃ。まずはその設定から始めようか」
TAKA: 「面倒くさそう…でも仕方ない、やってみます」
設定の迷宮に迷い込む
TAKA: 「エラーが出ました!」
Error sending email: Error: Invalid login: 535-5.7.8 Username and Password not accepted.
AI老師: 「.envファイルの設定を確認してみるのじゃ。特にEMAILとPASSWORDの値が正しく設定されているかどうかを」
TAKA: 「あ、これですか?」
MONGODB_URI=mongodb+srv://fukumasi:****@cluster0.l1ibnnc.mongodb.net/my-video-finder
RESET_PASSWORD_KEY=your-reset-password-key
EMAIL=******@gmail.com
PASSWORD=**********
CLIENT_URL=http://localhost:3000
AI老師: 「そうじゃ。ただし、そのパスワードではなく、Googleアカウントで生成したアプリパスワードを使用する必要があるのじゃ」
TAKA: 「もう!めんどくさすぎます!Gmail以外は使えないんですか?」
新たな可能性を探る
AI老師: 「もちろん、他のメールサービスも使用可能じゃ。例えば、Yahoo!メールを使用する場合は、Nodemailerの設定を以下のように変更すればよい」
const transporter = nodemailer.createTransport({
service: 'yahoo',
auth: {
user: process.env.EMAIL,
pass: process.env.PASSWORD
}
});
TAKA: 「おっ、それなら私のYahoo!メールを使えばいいんですね!」
AI老師: 「その通りじゃ。ただし、適切なエラーハンドリングも忘れずにな」
TAKA: 「とりあえずコピペして…よし、これで動くはず!」
しかし、新たなエラーが発生する。
signup.html:14 POST <http://localhost:3000/api/users/signup> 404 (Not Found)
TAKA: 「もう!なんで動かないんですか!」
AI老師: 「落ち着くのじゃ。エラーメッセージをよく見てみると、サインアップのエンドポイントが見つからないようじゃな。routes/users.jsファイルでエンドポイントが正しく設定されているか確認する必要があるぞ」
時間切れ…
TAKA: 「あー、もう仕事の時間です。今日はここまでにします…」
AI老師: 「了解じゃ。次回は必要なエンドポイントの設定から始めよう。今日の作業は途中だが、重要な学びがあったはずじゃ」
【AI任せプログラマーTAKAの今日のひとこと】
TAKA:(心の声)「なんでメールの設定こんなに面倒くさいんだよ…。結局今日は何も完成しなかったし、次回また一から教えてもらわないとダメじゃん。もう嫌になってきた…早く仕事終わらせて帰りてぇ」
※本日の開発作業は中断。パスワードリセット機能の実装は未完了のまま。次回に持ち越し。