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
如果请求已正确验证。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)