1. ホーム
  2. python

[解決済み] Django Rest フレームワークのトークン認証

2023-04-14 07:46:05

質問

私は Django Rest Framework Guides を読み、すべてのチュートリアルをやりました。すべてが理にかなっていて、あるべきように動作しているように見えました。私は基本認証とセッション認証が説明どおりに動作するようになりました。

django rest framework - api guide

しかし、私はドキュメントのトークン認証の部分で苦労しています。少し欠けていたり、チュートリアルほど深く掘り下げていなかったりします。

django-rest-framework - トークン認証

ユーザー用のトークンを作成する必要があると書いてありますが、models.pyのどこに書いてあるのでしょうか?

どなたか、初心者のために、ドキュメントのトークン認証の部分をもう少しうまく説明していただけませんか?

どのように解決するのですか?

いいえ、models.pyにはありません。モデル側では、適切なアプリをインクルードすればよいのです( rest_framework.authtoken )を INSTALLED_APPS . これによって、Userに対して外部キーとなるTokenモデルが提供されます。

あなたがしなければならないことは、いつ、どのようにこれらのトークンオブジェクトを作成すべきかを決めることです。あなたのアプリでは、すべてのユーザーが自動的にトークンを取得するのでしょうか?それとも、特定の承認されたユーザーだけが取得するのでしょうか?それとも、特定のユーザーが要求したときだけですか?

すべてのユーザーが常にトークンを持つ必要がある場合、リンク先のページに、トークンを自動的に作成するためのシグナルを設定する方法を示すコードの断片が記載されています。

@receiver(post_save, sender=User)
def create_auth_token(sender, instance=None, created=False, **kwargs):
    if created:
        Token.objects.create(user=instance)

この を models.py ファイルに書くと、Django のスレッドが起動したときに登録されます)

もしトークンが特定の時間にだけ作成されるべきなら、ビューコードの中で、適切な時間にトークンを作成し保存する必要があります。

# View Pseudocode
from rest_framework.authtoken.models import Token

def token_request(request):
    if user_requested_token() and token_request_is_warranted():
        new_token = Token.objects.create(user=request.user)

トークンを作成(保存)すると、認証に使用できるようになります。