著者は、フリーおよびオープンソース基金をWrite for Donationsプログラムの一環として寄付先として選択しました。
はじめに
認証は、システムに認証済みのユーザーを確認するプロセスであり、ソフトウェアアプリケーションを不正なアクセスから保護するのに役立ちます。ユーザーを認証するためには、ユーザー名/パスワードの確認、生体認証、または画像パスワードなどのさまざまな技術が使用されます。Djangoウェブフレームワークでは、認証処理をハードコーディングするか、django-allauth、django-rest-social-auth、django-registrationなどの既製のモジュールを使用することができます。
django-allauth
は、アカウントの認証、登録、管理、およびサードパーティー(ソーシャル)アカウントの認証を扱うDjangoアプリケーションの統合セットです。ローカルとソーシャルの両方のログインを処理できる能力から、最も人気のある認証モジュールの1つです。アプリの共通コードベースで追加のOAuth/OAuth2プロバイダーのサポートを追加できます。認証ロジックを処理するだけでなく、デザインニーズに合わせてカスタマイズすることもできます。
このチュートリアルでは、django-allauth
を使用してDigitalOceanアカウントで認証するDjangoアプリケーションを構築します。
前提条件
このチュートリアルでは、以下が必要です:
- A DigitalOcean account. If you do not have one, sign up for a new account.
- マシンにインストールされたPython 3.5以上。これは、マシンに対してPython 3のインストールとプログラミング環境のセットアップチュートリアルに従って行うことができます。
- Djangoウェブフレームワークの基本的な知識。これは、Django開発シリーズで見つけることができます。
ステップ1 — 開発環境の設定
このステップでは、Djangoアプリの開発環境を設定します。仮想環境をアクティブ化し、プロジェクトの依存関係をインストールします。
まず、新しいディレクトリを作成して移動します。このチュートリアルではDjango-Allauth
を使用します:
このフォルダをチュートリアルの残りの部分で使用するようにしてください。
次に、Pipenv
を使用して仮想環境を作成します。まず、pipenv
をインストールします:
次に、仮想環境をアクティブにします:
pipenv shell
次に、pipenv
を使用して開発に使用する依存関係(django
とdjango-allauth
)をインストールします:
これで、開発環境の設定が完了しました。次に、Djangoアプリケーションの開発を開始します。
ステップ2 — Djangoアプリケーションの作成
このステップでは、django-allauth
認証と共に使用するシンプルな1ページのDjangoアプリケーションを作成します。
アプリケーションを作成する最初のステップは、このチュートリアルでAuthentication
と呼ばれるプロジェクトアプリケーションを作成することです:
次に、プロジェクトディレクトリのパスにアクセスして、アプリケーション用のアプリを作成します。このチュートリアルではmain
を使用します:
プロジェクトのディレクトリで、nano
またはお気に入りのテキストエディタを使用してsettings.py
を開き、編集します:
インストールされているアプリのリストに、main
アプリを追加します:
ウェブサイトのために1つのページをレンダリングしているため、models.py
ファイルを変更する必要はありません。
次に、プロジェクトの urls.py
ファイルを編集して、以下の変更を行います。
urls.py
ファイルは、Django アプリのルーティングに使用されます。
次に、main
アプリ内に別の urls.py
ファイルを作成し、以下の行を追加します。
この新しい urls.py
ファイルは、main
アプリのファイルをルーティングするために使用されます。
次に、views.py
ファイルを開き、以下の行を追加します。
views.py
ファイルは、テンプレートディレクトリ内の home.html
ページをレンダリングするために使用されます。
次に、プロジェクトのルートフォルダ(Authentication
)に、templates
という新しいディレクトリを作成します。その templates
ディレクトリ内に、home.html
という名前の HTML ページを作成し、以下の行を追加します。
このデモのウェブページには、カードでレンダリングされたサンプルテキストと、後で認証に使用するログインエリアが含まれています。
このウェブページは、Material Design をベースにした無料でオープンソースのコンテンツデリバリーフロントエンドフレームワークである Materialize CDN を使用してスタイリングされています。Materialize CSS、JavaScript、および jQuery ライブラリをロードして、美しいレスポンシブなプロジェクトを作成します。CDN がスタイリングファイルをロードするには、インターネット接続が必要です。
Django-Allauth/Authentication
ディレクトリパスから、次のコマンドを使用して Web アプリを起動します。
次のような出力が表示されます:
OutputPerforming system checks...
System check identified no issues (0 silenced).
June 10, 2022 - 13:35:20
Django version 4.0.4, using settings 'Authentication.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
URL http://127.0.0.1:8000/
に移動します。次のように見えるウェブサイトが表示されます:
サンプルのウェブサイトにはダミーテキストが表示され、下部にログインエリアが含まれています。認証を設定したら、後でウェブページのログインリンクを使用します。
このステップでは、ワンページのアプリケーションを構築しました。次に、django-allauth
を使用して認証を処理します。
ステップ3 — django-allauth
の設定
django-allauth
を使用して認証するには、まずセットアップする必要があります。これは、プロジェクトのファイルにいくつかの変更を加えることで行われます。
編集するためにAuthentication/settings.py
を開きます。 INSTALLED_APPS
の下に、django-allauth
アプリとDigitalOceanをソーシャルログインプロバイダとして登録するために、強調表示された行を追加します:
次に、TEMPLATES
セクションを以下のように更新します:
新しい行は、Django-Allauth
からのHTTPリクエストを処理します。
次に、AUTHENTICATION_BACKENDS
のセクションを作成し、次の行を追加します:
最初の行は、後で行うDjango管理ダッシュボードを介したユーザーのユーザー名によるログインに使用されます。2番目の行は、django-allauth
特有の認証メソッド、例えばOAuthプロバイダーによるログインに使用されます。
次に、次のように2つの認証リダイレクトを追加します:
これらの行は、認証後とウェブサイトからログアウト後にユーザーをホームページにリダイレクトします。
settings.py
の最後の編集は、サイトのURLのIDを設定することです。ファイルの最後に、次の行を追加します:
この行は、settings.py
ファイルに関連付けられているSite
オブジェクトのデータベースIDを指定します。
ファイルを保存して閉じます。
次に、ルートのurls.py
ファイルを編集します。以下のようにAllauth
アプリへのパスを追加します:
この新しい行は、allauth
アプリのURLファイルへのルートを提供します。django-allauth
アプリには、HTMLページ用の一連のURLが付属しています。allauth
によって提供されるいくつかのURLには、account_login
、account_logout
、account_set_password
などが含まれます。詳細については、django-allauth
の製品ドキュメントを参照してください。
ファイルを保存して閉じます。
このステップでは、django-allauth
をアプリケーションに設定し、認証に使用する準備が整いました。
ステップ4 — サードパーティ認証プロバイダの追加
このステップでは、django-allauth
を使用してDjangoアプリにサードパーティ認証を追加します。Google、Facebook、Twitterなどの多くのサードパーティ認証プロバイダをdjango-allauth
と使用できます。django-allauth
のプロバイダ一覧に記載されている他のプロバイダも含まれます。
このチュートリアルでは、ソーシャルログインとしてDigitalOceanを使用します。DigitalOceanのような認証プロバイダを追加するには、まずそれらを登録する必要があります。
DigitalOceanアカウントにログインし、DigitalOceanクラウドプラットフォームに移動します。そこでは、次のようなダッシュボードにアクセスします:
ダッシュボードの左側にあるAPIボタンをクリックして、OAuthアプリケーションを作成します。アプリケーション&APIダッシュボードで、OAuthアプリケーションボタンをクリックして、サイトのOAuth登録にアクセスします。次のようなダッシュボードが表示されます:
次に、アプリのOAuthアプリケーション登録を開始するためにOAuthアプリケーション登録ボタンをクリックしてください。ポップアップフォームが表示されます:
プロジェクト名前(Django-Allauth
)と任意の説明を入力してください。 ホームページURLを入力セクションに、次のURLのいずれかを入力してください:
http://127.0.0.1:8000
http://localhost:8000
コールバックURLを入力セクションに、次のリダイレクトURLのいずれかを入力してください:
http://127.0.0.1:8000/accounts/digitalocean/login/callback/
http://localhost:8000/accounts/digitalocean/login/callback/
注意:デモンストレーション目的で、このチュートリアルではlocalhost:8000
または127.0.0.1:8000
を使用しています。本番環境にアプリを展開する際には、URLをドメイン名を含めるように変更する必要があります。
プロジェクト情報を入力した後、OAuthアプリケーション登録をクリックして変更内容を保存します。その後、以下のようにアプリケーションが作成されたダッシュボードにリダイレクトされます:
アプリケーション名をクリックして、クライアントIDとクライアントシークレットにアクセスしてください:
これらの詳細をコピーして保存してください。
DigitalOceanでAPIを設定した後、Djangoアプリケーションの管理パネルに追加できます。Django管理パネルにアクセスするには、まずスーパーユーザーが必要です。次のコマンドを使用してスーパーユーザーを作成できます:
リクエストされた詳細を入力して、サーバーを再度実行してください。
URL http://127.0.0.1:8000/admin/
を使用して管理パネルにアクセスします。スーパーユーザーの詳細でログインし、以下のような管理ダッシュボードにアクセスします:
左パネルで、サイト をクリックし、サイトの追加 + をクリックして、既存のサイト(example.com
)を編集するか、http://127.0.0.1:8000
を使用して新しいサイトを追加します:
この設定は、DigitalOcean の認証が実装されるサイトの URL サーバーを設定します。この場合、http://127.0.0.1:8000
です。
保存 をクリックします。
次に、ホーム をクリックしてメインダッシュボードに戻ります。 ソーシャルアカウント セクションで、ソーシャルアプリケーション をクリックし、ソーシャルアプリケーションの追加 + をクリックします。DigitalOcean コンソールからコピーした詳細を使用して、サービスプロバイダー、アプリ名、クライアント ID、およびクライアントシークレットキーの必要な詳細を入力します。サイト の下で、利用可能なサイト の下に作成したばかりのサイトを選択し、矢印(—>)をクリックしてそれを 選択されたサイト パネルに移動させます。詳細を保存するために 保存 ボタンをクリックします。
この設定は、ソーシャルログインプロバイダーに接続するために使用されます。これには、クライアントID と シークレットキー が使用されます。これらは、アプリケーションの公開識別子と機密識別子としてそれぞれ使用され、アプリケーションを認証し、DigitalOcean の API にリクエストを行うために使用されます。
このステップでは、Djangoアプリケーションのサードパーティ認証プロバイダーとしてDigitalOceanを設定しました。最終ステップでは、DigitalOceanアカウントを使用してサイトにログインします。
ステップ5 — 認証のテスト
このステップでは、DigitalOceanアカウントを使用してDjangoサイトにログインします。まず、管理者としてログアウトして、サインインページ (http://127.0.0.1:8000/accounts/login/
) に移動します:
DigitalOceanリンクをクリックして、DigitalOceanを使用してログインします。(スクリーンショットに示されているように、別の認証方法は、ユーザー名とパスワードを使用してサインアップすることです。)
次の画面で、続行をクリックします。新しいページが表示され、DigitalOceanチームアカウントを選択し、アプリケーションを承認ボタンをクリックする必要があります。
承認とは、人がリソースにアクセスする能力を付与するプロセスです。この場合、DigitalOceanからのログイン資格情報に対するウェブサイトのアクセスを承認しています。
ログインした後、以下に示すようにホームページが表示されます:
ログインに成功すると、ユーザー名とログアウトリンクがウェブサイトに表示されます。
注意:このプロセス中に、SocialApp matching query does not existというエラーメッセージが表示される場合があります。
この問題は通常、サイトID番号を誤って参照した場合に発生します。たとえば、最初のサイトを example.com
として設定した場合です。これを解決するには、settings.py
内で SITE_ID
を見つけ、エラーが消えるまでその値を1ずつ増やしてください。
このステップでは、DigitalOceanのログイン情報を使用してサイトにログインし、認証構成をテストしました。
結論
このチュートリアルでは、django-allauth
を使用してソーシャル認証を処理するDjangoアプリを構築しました。DigitalOceanのソーシャルログインを組み込み、サイトにログインしてテストしました。プロジェクトのコードはGitHubでアクセスできます。
次のステップとして、django-allauth
を使用して他のDjangoアプリケーションプロジェクトをどれでも認証できます。Django認証に関する詳細は、django-allauth
を使用したDjango認証について、django-allauthプロバイダーのいずれかで詳細をご覧ください。 Django-Allauthの公式ドキュメントおよび認証に関するDjango公式ドキュメントを参照してください。
allauth
ページにスタイリングを追加することもできます。これらのページは基本的なデフォルトのスタイリングを持っています。 allauth
ページにスタイルを追加するには、GitHubからdjango-allauth
プロジェクトをクローンし、クローンしたリポジトリからdjango-allauth/allauth/templates
ディレクトリを使用してページをスタイリングします。