我应该如何构建使用 DRF 进行令牌身份验证的登录序列化程序和视图?



这就是我的注册序列化程序看起来像的样子

class AuthUserSerializer(serializers.ModelSerializer):
class Meta:
model = AuthUser
fields = ('first_name', 'last_name', 'email', 'password', 'role')

def create(self, data):
return AuthUser.objects.create(**data)

以下是它的观点:

class Signup(CreateAPIView):
serializer_class = AuthUserSerializer
queryset = AuthUser.objects.all()
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.save()
headers = self.get_success_headers(serializer.data)
token, created = Token.objects.get_or_create(user=serializer.instance)
return Response({'token': token.key}, status=status.HTTP_201_CREATED, headers=headers)

数据被成功地插入data中,并且令牌被正确地生成。现在我想让登录端点,用户将在其中输入他的电子邮件和密码,如果为true,则返回令牌。请帮助我,关于我应该如何去构建这个登录序列化程序&看法

你确定必须这么做吗?DRF提供了完整的身份验证模型,您不需要自己构建它。如果要自定义它,请使用继承。

设置.py中定义身份验证类(在您的情况下,使用TokenAuthentication(

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

urls.py中添加auth-url:

from rest_framework.authtoken import views
urlpatterns += [
path('api-token-auth/', views.obtain_auth_token)
]

如果您想自定义身份验证,请从DRF ObtainTokenAuth:继承

from rest_framework.authtoken.views import ObtainAuthToken
from rest_framework.authtoken.models import Token
from rest_framework.response import Response
class CustomAuthToken(ObtainAuthToken):
def post(self, request, *args, **kwargs):
serializer = self.serializer_class(data=request.data,
context={'request': request})
serializer.is_valid(raise_exception=True)
user = serializer.validated_data['user']
token, created = Token.objects.get_or_create(user=user)
return Response({
'token': token.key,
'user_id': user.pk,
'email': user.email
})

然后更改urls.py

urlpatterns += [
path('api-token-auth/', CustomAuthToken.as_view())
]

阅读DRF文档中的更多信息:https://www.django-rest-framework.org/api-guide/authentication/

最新更新