장고 유저 모델 확장을 하여 사용하던 중, admin 사이트에서 토큰 생성이 가능했지만 유저가 생성될 때마다 토큰을 할당해줄 수는 없을까하고 검색해보니, 공식문서에 친절하게 설명이 나와있었다.

우선 토큰을 사용하기 위해 settings.py에 아래와 같이 추가해주자.

INSTALLED_APPS = [
    ...
    'rest_framework.authtoken'
]

처음 추가했다면 migrate를 꼭 해주어야 하니 잊지 말자.

회원가입시, 자동으로 토큰 생성하기

유저를 생성할 때 마다 토큰을 할동하고 싶다면 User's의 post_save signal을 활용해 자동 생성이 가능하다.

프로젝트 models.py에 아래와 같이 입력해준다.

from django.conf import settings
from django.db.models.signals import post_save
from django.dispatch import receiver
from rest_framework.authtoken.models import Token

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

작동하는지 테스트하기

아래와 같이 포스트맨을 활용해서 바디의 form-data로 username과 password를 담아 유저를 생성해 주었다.

https://images.velog.io/images/jacoblee19/post/8d48d9d5-c9d3-4f16-88e7-101b435180ca/Screen Shot 2021-02-09 at 11.17.26 AM.png

아래와 같이 유저가 생성됨과 동시에 admin 페이지에서 토큰이 생성되었음을 확인할 수 있다.

https://images.velog.io/images/jacoblee19/post/ecacf74a-d48c-4b01-9663-10da75cc5030/Screen Shot 2021-02-09 at 11.19.04 AM.png

기존에 있던 유저를 위한 토큰을 생성하고 싶다면?

아래와 같이 for문을 사용해 토큰 생성이 가능하다.

from django.contrib.auth.models import User
from rest_framework.authtoken.models import Token

for user in User.objects.all():
    Token.objects.get_or_create(user=user)