API请求将由匿名用户发送。没有登录/注册功能。
我需要验证API请求,我尝试的一种基本方法是在每个请求中发送一个验证密钥。这个认证密钥I作为常量保存在Angular前端。
一定有更好更成熟的方法,恳请帮助!
Django REST框架在很大程度上假设请求是基于用户进行身份验证的,但它们确实提供了对身份验证匿名请求的支持。虽然这在很大程度上打破了"身份验证"意味着"验证(Django)用户是真实的"的假设,但Django REST框架确实允许它发生,只是代替了AnonymousUser
。
DRF中的身份验证可以定义请求上的request.user
(经过身份验证的用户)和request.auth
(如果适用,通常是使用的令牌)属性。因此,对于您的身份验证,您将持有您创建的令牌(在模型中或其他地方),这些令牌将被验证,而不是用户凭据,并且您最终不会设置用户。
from django.contrib.auth.models import AnonymousUser
from rest_framework import authentication
from rest_framework import exceptions
class ExampleAuthentication(authentication.BaseAuthentication):
def authenticate(self, request):
auth = authentication.get_authorization_header(request)
if not auth or auth[0].lower() != b'token':
return None
if len(auth) == 1:
msg = _('Invalid token header. No credentials provided.')
raise exceptions.AuthenticationFailed(msg)
elif len(auth) > 2:
msg = _('Invalid token header. Credentials string should not contain spaces.')
raise exceptions.AuthenticationFailed(msg)
try:
token = Token.objects.get(token=auth[1])
except Token.DoesNotExist:
raise exceptions.AuthenticationFailed('No such token')
return (AnonymousUser(), token)
此示例假设您有一个Token
模型,该模型存储将进行身份验证的令牌。如果请求被正确验证,令牌对象将被设置为request.auth
。
阅读关于身份验证的其他api文档及其教程-它们提供了对选项的可靠介绍。