我的应用程序不需要密码,因为我想使用电话和 OTP 登录。我正在尝试实现自定义简单 JWT 令牌身份验证,该身份验证仅需要电话号码而无需密码。我是 Django 新手,我确实检查了 stackoverflow 中的一些链接并尝试了以下操作:
class CustomSerializer(TokenObtainPairSerializer):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields[self.username_field] = serializers.CharField()
del self.fields['password']
def validate(self,attr):
print(attr)
data = super().validate(attr)
token = self.get_token(self.user)
print (token)
try:
request = self.context["request"]
print(request)
except KeyError:
pass
request_data = json.loads(request.body)
print(request_data)
Run Code Online (Sandbox Code Playgroud)
因此,当执行 validate 方法时,它会执行 validate TokenObtainPairSerializerinit 方法,该方法又调用其父类的 init 方法来验证密码。因此,即使我在自定义序列化程序中删除密码字段,它仍然会给我一个密码密钥错误。我尝试传递密钥错误,但再次失败request.body。
我被困在这个问题上,我不知道如何实现没有密码的简单 JWT。
django django-rest-framework django-rest-framework-simplejwt
我正在尝试验证和解码 simple-jwt-django-rest-framework 令牌。我知道我们可以使用 simple-jwt 的验证 api。但我想在我的观点中解码和验证。以下是我正在尝试的当前代码:-
//in views.py
class home(APIView):
def post(self,request,*args,**kwargs):
print("request is ",request._request)
verify_token_response = token_verify(request._request)
print("status_code is ", verify_token_response.status_code)
if(verify_token_response.status_code == 200):
jwt_object = JWTAuthentication()
validated_token = jwt_object.get_validated_token(request._request)
user = jwt_object.get_user(validated_token)
print(user)
return Response({
'status':True,
'message':'home'
})
Run Code Online (Sandbox Code Playgroud)
此代码适用于我的令牌验证。它正在正确验证令牌,但是当我检索 valiated_token 和用户时,它给了我以下错误:-
{
"detail": "Given token not valid for any token type",
"code": "token_not_valid",
"messages": [
{
"token_class": "AccessToken",
"token_type": "access",
"message": "Token is invalid or expired"
}
]
}
Run Code Online (Sandbox Code Playgroud) python django-views django-rest-framework django-rest-framework-simplejwt