DRF TokenAuthentication

TokenAuthentication

首先在INSTALLED_APPS中设置

INSTALLED_APPS = (
    ...
    'rest_framework.authtoken'
)

然后python manage.py migrate生成一个和user一对一关系的token表

创建token

from rest_framework.authtoken.models import Token

token = Token.objects.create(user=...)
print(token.key)

验证token

在客户端的请求头中添加
Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b
注意 上面的Token的左右两端都有空格

request.user和request.auth在后端的返回

  • request.user返回一个Django的User instance
  • request.auth会返回一个rest_framework.authtoken.models.Token的instance

没有验证通过的响应会返回 401 Unauthorized

注意 如果你使用了TokenAuthentication你必须确保你的API只能用https访问

生成Tokens

使用信号signals

如果你想让每个user都有一个自动生成的Token, 你可以简单的捕捉User的post_save信号

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)

注意你要确保你的这段代码在一个已经installed的model.py

如果你已经创建了一些user, 你可以对所有已经存在的users生成token如下:

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)

你可能感兴趣的:(Django)