저는 DRF 1.10과 Python 3.5를 사용하고 있습니다.Django Rest Framework로 토큰 인증을 올바르게 설정하려면 어떻게해야합니까?
DRF의 rest_framework.authtoken.models.Token
을 사용하여 로그인 할 때 사용자를 인증하려고합니다. 이것은 내가 무엇을 가지고 : 로그인에
views.py
class LoginView(views.APIView):
serializer_class = LoginSerializer
def post(self, request, **kwargs):
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
user = User.objects.get(username=serializer.data['username'])
token = Token.objects.create(user=user)
response = {}
response['user'] = serializer.data
response['token'] = token.key
return Response(response, status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
serializers.py
class LoginSerializer(serializers.Serializer):
username = serializers.CharField()
password = serializers.CharField()
def validate(self, attrs):
username = attrs.get("username").lower()
password = attrs.get("password")
user = authenticate(username=username, password=password)
if user:
attrs["user"] = user
return attrs
else:
raise serializers.ValidationError(
"Unable to login with credentials provided."
)
내가 토큰을 사용자에게 제공에 내가 그 토큰을 삭제하려면 로그 아웃합니다. 문제는 토큰의 키와 관련된 사용자를 찾아서 토큰을 삭제하려고 할 때 토큰을 찾을 수 없다는 것입니다. 로그 아웃보기는 다음과 같습니다.
class LogoutView(views.APIView):
def post(self, request, **kwargs):
try:
token = request.META['HTTP_AUTHORIZATION'].split(" ")[1]
invalidate_token = Token.objects.filter(key=token, user=request.user)
invalidate_token.delete()
return Response({ detail: "Logged out"}, status=status.HTTP_202_ACCEPTED)
except:
return Response({"error": ["Token does not exist!"]}, status=status.HTTP_400_BAD_REQUEST)
사용자를 로그 아웃 할 때 문제가 발생했습니다. request.user
은 여전히 AnonymousUser
이고 User
이 아님을 깨달았습니다. 이 문제를 해결하려면 어떻게해야합니까?
이것은 우편 배달부 내 헤더입니다.
장고 관리자가 설치되어있는 경우, 당신이 할 수있는 거기에 인증 토큰을보십시오. 그것들을 비교하여 사용중인 토큰이 여전히 존재하고 올바른 django 사용자와 연관되어 있는지 확인하십시오. – Soviut
@Soviut 관리자 도구를 보았습니다. 토큰은 존재하지만 올바른 사용자와 연관되어 있지만 여전히 제대로 작동하지 않습니다. –