Zキャラクター
← 戻る

SNS認証の仕組み

tokeisan6 tokeisan6

communityプロジェクトにおける「SNS認証(ソーシャルログイン)」は、Django用ライブラリ **`django-allauth`** を基盤として実装されています。 ### 1. 対応SNS一覧 以下の5種類のプロバイダにログインしています(`templates/account/login.html` 参照)。 * **GitHub** * **Google** * **Discord** * **X (旧Twitter)** * **LINE** ### 2. 実装の工夫と課題 各SNSのAPI仕様の違いを吸収するための独自処理が実装されています。 * **アバター(アイコン画像)の取得方式の違い**: * **GitHub**: 画像URLが直接返ってくる。 * **Discord**: ハッシュ値のみが返ってくるため、それを元にURLを組み立てる必要がある。 * **LINE**: 署名付きの長いURLが返ってくる。 * **データベースの制約問題**: * LINEから返却される画像URLが長すぎて、デフォルトのDBカラム長では保存できず、調整が必要だった。 * **権限とエラー**: * LINEのAPIでは初期に必要な権限(Scope)の指定が不足しており、権限不足のエラーを解消するために権限追加が必要だった。 ### 3. 環境構成への対応 クラウドと自宅サーバーなど「複数の環境」で運用しているため、各SNS開発者ポータルへの「コールバックURL(redirect_uri)」の設定も複雑化しています。 * 環境ごとに登録済みのURLを切り替えたり、制限があるプロバイダに対しては設定の見直しが必要だった ### 4. セキュリティ設定 `settings.py` からは、セッション管理とセキュリティに関する強化設定がなされていることが確認できます。 * `SESSION_COOKIE_SECURE = True`: HTTPS接続時のみセッションCookieを送信する。 * `CSRF_COOKIE_SECURE = True`: CSRFトークンもHTTPS限定で送信する。 これらにより、ユーザーは固有のパスワードを記憶しなくても、日常的に利用しているSNSアカウントを使って安全にログイン・認証を行う仕組みが整えられています。

コメント(0)