小编use*_*549的帖子

实现djangorestframework-simplejwt无密码令牌认证

我的应用程序不需要密码,因为我想使用电话和 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

8
推荐指数
1
解决办法
7484
查看次数

如何解码和验证 simple-jwt-django-rest-framework 令牌

我正在尝试验证和解码 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

5
推荐指数
3
解决办法
4262
查看次数