ダーク/ライト切り替え

Django + django-passwordless + Gmail で「メール内リンクを踏ませて本人確認」を実装する備忘録

投稿日 2026-01-15T10:30:33.345488+09:00

Django + django-passwordless + Gmail で「メール内リンクを踏ませて本人確認」を実装する備忘録

目次

目次を読み込み中...

本記事は、Django の標準認証を使わない顧客データモデルに対して、

  • Gmail をメールサーバとして使い
  • ユーザーに **リンク付き確認メール** を送り
  • リンクを踏ませることで **本人確認(操作許可)** を行う

という一連の処理を、django-passwordless を使って最小構成で実装するための備忘録です。

対象ユースケース:

  • 退会手続き
  • アカウント情報更新
  • 重要操作前の本人確認

ログイン状態や Django の User 認証とは完全に無関係な前提です。


全体像

ポイント:

  • **パスワード入力なし**
  • **セッション常駐なし**
  • **操作単位の一時認証**

前提条件

  • Django プロジェクトが作成済み
  • 顧客モデルは Django 認証とは無関係

1. Gmail 側の準備(重要)

1-1. Gmail に 2FA を有効化

  • Google アカウントのセキュリティ設定から
  • **2 段階認証を必ず ON** にする

1-2. アプリパスワードを発行

  • Google アカウント → セキュリティ
  • 「アプリ パスワード」
  • 種類:メール
  • デバイス:任意

→ 16 桁のパスワードが発行される

⚠️ 通常の Gmail パスワードは使えない


2. Django のメール設定(Gmail SMTP)


3. django-passwordless の導入

3-1. インストール

3-2. settings.py 設定


4. URL 設定

※ 今回はログイン用途ではなく「本人確認トークン生成」に使う


5. 確認メールを送る処理

5-1. トークン付きリンクを送信

  • トークンは **ワンタイム & 期限付き**
  • UUID を直接晒さない

6. リンク先(本人確認ビュー)

ここで初めて:

  • 「この操作をしているのは本人である」

とみなす


7. セキュリティ上の注意点

必ずやること

  • トークンに有効期限を設定(passwordless のデフォルトで対応)
  • 操作完了後は **再利用不可** にする
  • 重要操作は **POST のみ許可**

やらない方がいいこと

  • 永続ログイン
  • パスワード入力要求
  • トークンを URL パラメータ以外に保存

8. この方式が向いている理由

  • Django 認証に依存しない
  • 顧客がログイン状態を持たない
  • 退会・更新など **単発操作** に強い
  • UX がシンプル

まとめ

  • **django-passwordless はログイン専用ではない**
  • Gmail + アプリパスワードで十分実用
  • 顧客データモデルが User でなくても問題なし
  • 「操作単位の本人確認」には最適


準備中

このサイトをシェアする

Django + django-passwordless + Gmail で「メール内リンクを踏ませて本人確認」を実装する備忘録