【学習記録】Django REST frameworkチュートリアル13

この記事の続きです。

programming-gogogogo.hatenablog.com

こちらの動画を見ながらPythonDjango REST framework(DRF)について勉強しています。

www.youtube.com

前回はベーシック認証を使って認証を行いました。
今回はトークンを使っての認証を実装します。

公式ドキュメントではこちらに説明があります。

www.django-rest-framework.org

まずトークンを保持するDBテーブルを用意します。

MyProject/settings.pyに以下の記述を追加します。

 'rest_framework.authtoken'

次に以下のmigrateコマンドを実行します。

python manage.py migrate

するとマイグレーションが行われトークンを保持するテーブルがDBに追加されます。
f:id:JunpeiNakasone:20210325220435p:plain

管理画面から確認するとtokensテーブルが新しく作成されています。
f:id:JunpeiNakasone:20210325220655p:plain

そのまま管理画面でtokensテーブルにユーザーを指定してデータを保存するとトークンが発行されてました。
f:id:JunpeiNakasone:20210325221427p:plain f:id:JunpeiNakasone:20210325221503p:plain

トークンをユーザーに紐づけて保存できたのでPostmanからリクエストを送って動作確認します。

ベーシック認証で仕様したAuthorizationのTYPEはInherit auth from parentに変更しておきます。
f:id:JunpeiNakasone:20210325221705p:plain

まずヘッダーにトークンを設定しないでリクエストを送ると"Authentication credentials were not provided."エラーになりました。
f:id:JunpeiNakasone:20210325221820p:plain

次にヘッダーのKEYをAuthorizationにして、VALUEをDBに保存されているトークンにするとデータが正常に取得できました。(VALUEはTokenと書く必要があるみたいなので注意)
f:id:JunpeiNakasone:20210325222119p:plain

DRFでは少ない工数トークン認証が実装できて便利そうだと感じました。
もう少し使ってみてより細かいメリットデメリットを調べていきたいと思います。