パスワードの保存・セッションと Cookie・CSRF から、メール認証・SNS ログイン(OAuth 2.0)・プランとロール・レート制限と二要素認証・監査ログと退会まで。全30レッスンで、会員制サイトのログインを最初から最後まで自分で組み立てられるところまで進みます。コードとテスト結果は、すべて Django 6.1 で実際に動かしたものです。
全30レッスンを6つの章に分けています。第1章から順に進めるのがおすすめですが、 気になるところだけ拾い読みしてもかまいません。 ※ Django はブラウザ内で実行できないため、Django・pytest-django・pyotp を入れた仮想環境で試してください。OAuth の state やレート制限など、標準ライブラリだけで完結する例はブラウザ上でそのまま実行できます。前提は Django コースです。
パスワードをハッシュで保存し、ログイン状態をセッションと Cookie で保ち、CSRF トークンでなりすまし POST を弾く——認証の土台を Django の標準機能で確かめます。最後は、ログインとログアウトの正体が「セッションにユーザー ID を記録して消すこと」だと見えるところまで進みます。
サインアップで確認メールを送り、トークン付きリンクでアドレスを確かめ、パスワードなしのログインコードとリセットまで作ります。最後は弱いパスワードを登録前に弾き、認証メールを迷惑メールに入れないための SMTP と SPF・DKIM・DMARC を押さえます。
「Google でログイン」の裏側にある OAuth 2.0 の認可コードフローを、認可 URL・state・コールバック・トークン交換の順に分解して確かめます。各プロバイダの鍵の扱いとアカウント連携を押さえたうえで、最後は本番で django-allauth に任せる理由まで進みます。
User に Profile を 1 対 1 で足してプランとロールを持たせ、「誰が何をしてよいか」を分けます。有料だけに本編を見せる出し分けと無料公開範囲の制御を作り、最後はログイン必須ページの保護漏れを防ぐところまで進みます。
レート制限で乱用を抑え、連続失敗のロックで総当たりを止め、TOTP の二要素認証でパスワードが漏れたときに備えます。最後は、ログインのたびにセッション ID を付け替える仕組みと、SECRET_KEY などの鍵を環境変数に置く管理まで進みます。
「ログインできない」という問い合わせを原因別に切り分け、その土台になる監査ログで誰が・いつ・何をしたかを残します。最後は退会で何を消し、何を匿名化して残すかを設計して、全30回を締めくくります。
全30レッスンを終えたら、次は作ったログインの器に課金をつなぐ Stripe 決済とサブスクリプション へ。メンバーシップで全コースが解放されます。