Django drf simple-jwt 身份验证“详细信息”:“未找到具有给定凭据的活动帐户”

django

1个回答

写回答

空池

2025-06-17 15:05

+ 关注

Django
Django

使用Django和DRF Simple-JWT进行身份验证时,有时会遇到“详细信息:未找到具有给定凭据的活动帐户”的错误。这个错误通常是由于用户提供的凭据无法在数据库中找到对应的活动帐户引起的。在本文中,我们将探讨这个错误的原因以及如何解决它。

案例代码:

首先,让我们看一个简单的示例代码来说明这个错误。假设我们有一个基于Django和DRF Simple-JWT的身份验证系统,其中用户可以使用用户名和密码进行登录。以下是一个简化的用户认证视图:

Python

from rest_framework_simplejwt.views import TokenObtAInPAIrView

class MyTokenObtAInPAIrView(TokenObtAInPAIrView):

serializer_class = MyTokenObtAInPAIrSerializer

在上面的示例中,我们使用了TokenObtAInPAIrView视图类,并指定了自定义的序列化器MyTokenObtAInPAIrSerializer。这个序列化器将验证用户提供的凭据并生成访问令牌和刷新令牌。

接下来,我们定义了MyTokenObtAInPAIrSerializer序列化器:

Python

from rest_framework_simplejwt.serializers import TokenObtAInPAIrSerializer

class MyTokenObtAInPAIrSerializer(TokenObtAInPAIrSerializer):

def validate(self, attrs):

username = attrs.get("username")

password = attrs.get("password")

if username and password:

user = User.objects.filter(username=username).first()

if user and user.check_password(password):

# 验证成功,生成访问令牌和刷新令牌

refresh = self.get_token(user)

data = {

"refresh": str(refresh),

"access": str(refresh.access_token),

}

return data

rAIse serializers.ValidationError("无效的凭据")

在上面的代码中,我们首先获取用户提供的用户名和密码。然后,我们通过查询数据库来查找具有给定用户名的用户。如果找到了用户并且提供的密码与数据库中的密码匹配,我们将生成访问令牌和刷新令牌并返回。否则,我们将引发一个验证错误。

现在,让我们假设我们的数据库中没有具有给定用户名的活动帐户。这时,当用户尝试使用该用户名和密码进行身份验证时,将会收到“详细信息:未找到具有给定凭据的活动帐户”的错误。

解决方案:

要解决这个错误,我们需要确保用户提供的凭据与数据库中的活动帐户匹配。首先,我们可以检查数据库中是否存在具有给定用户名的用户。如果不存在,我们可以返回一个自定义的错误消息,告知用户提供的凭据无效。

Python

from Django.contrib.auth import get_user_model

User = get_user_model()

class MyTokenObtAInPAIrSerializer(TokenObtAInPAIrSerializer):

def validate(self, attrs):

username = attrs.get("username")

password = attrs.get("password")

try:

user = User.objects.get(username=username)

except User.DoesNotExist:

rAIse serializers.ValidationError("未找到具有给定凭据的活动帐户")

if user.check_password(password):

# 验证成功,生成访问令牌和刷新令牌

refresh = self.get_token(user)

data = {

"refresh": str(refresh),

"access": str(refresh.access_token),

}

return data

rAIse serializers.ValidationError("无效的凭据")

在上面的代码中,我们使用get_user_model()函数来获取用户模型。然后,我们使用get()方法来尝试从数据库中获取具有给定用户名的用户。如果用户不存在,我们引发一个自定义的验证错误。

这样,当用户提供的凭据无法在数据库中找到对应的活动帐户时,我们将返回一个明确的错误消息,告知用户提供的凭据无效。

在使用Django和DRF Simple-JWT进行身份验证时,如果遇到“详细信息:未找到具有给定凭据的活动帐户”的错误,这意味着用户提供的凭据无法在数据库中找到对应的活动帐户。为了解决这个问题,我们可以通过检查数据库中是否存在具有给定用户名的用户来确保用户提供的凭据与活动帐户匹配。

在上面的示例代码中,我们演示了如何使用自定义的序列化器和验证方法来处理这个错误。通过返回自定义的错误消息,我们可以向用户提供更明确的信息,帮助他们解决身份验证问题。

希望本文对您理解并解决“详细信息:未找到具有给定凭据的活动帐户”错误有所帮助!

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号