Existe-t-il un moyen de désactiver le jeton d'actualisation?
Retirez le champ de rafraîchissement de la réponse.
3 Réponses :
La manière facile
Ecrivez votre propre vue en étendant TokenObtainPairView
et remplacez la méthode de post
.
# in your serializers.py from rest_framework_simplejwt.serializers import TokenObtainSerializer from rest_framework_simplejwt.tokens import RefreshToken class MyTokenObtainSerializer(TokenObtainSerializer): @classmethod def get_token(cls, user): return RefreshToken.for_user(user) def validate(self, attrs): data = super().validate(attrs) refresh = self.get_token(self.user) data['access'] = str(refresh.access_token) return data # in your views.py from rest_framework_simplejwt.views import TokenObtainPairView from .serializers import MyTokenObtainSerializer class MyTokenView(TokenObtainPairView): serializer_class = MyTokenObtainSerializer # in your urls.py urlpatterns = [ path('api/token/', MyTokenView.as_view()), ]
La manière compliquée mais plus agréable
Vous devez créer un sérialiseur étendant TokenObtainSerializer
, puis définir une vue personnalisée comme ci-dessus. Cette fois, mettez votre nouveau sérialiseur comme serializer_class de cette vue et oubliez la méthode de publication.
# in your views.py from rest_framework import status from rest_framework.response import Response from rest_framework_simplejwt.views import TokenObtainPairView class MyTokenView(TokenObtainPairView): def post(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) try: serializer.is_valid(raise_exception=True) except TokenError as e: raise InvalidToken(e.args[0]) serializer.validated_data.pop('refresh', None) return Response(serializer.validated_data, status=status.HTTP_200_OK) # in your urls.py urlpatterns = [ path('api/token/', MyTokenView.as_view()), ]
Merci, j'ai essayé la meilleure façon, mais le problème demeure. Il semble que sauter les data['refresh']
dans validate()
ne fonctionne pas. Il renvoie le rafraîchissement et l'accès, même si je supprime les data['access'] = ...
simplejwt = 4.3.0.
Hé, je l'ai essayé et il ne renvoie que le jeton d'accès dans le serializer.validated_data
. Vous pouvez le vérifier en exécutant ce script dans votre shell django - gist.github.com/shafi2263/6bb24d5f17acda858ecc61dcec5a6819
Merci @ alamshafi2263. Je pense que vous donnez la direction parfaite.
Je ne sais pas pourquoi, je git toujours l'élément d' refresh
de la réponse du serveur, pas Django Shell. (voir également les variables de débogage sur la photo). Donc, je viens simplement de data.pop('refresh', None)
, puis le problème est résolu.
Merci pour votre temps et votre code.
Vous pouvez analyser le dictionnaire user.tokens ()
user.tokens()['access'] user.tokens()['refresh]
Et passez-les à la touche "jetons" en réponse