0

私はDjango Rest Framework 3.12.2とdjango.contrib.authでDjango 3.2を使用しています。コマンドラインでいくつかのスーパーユーザーを作成しました

python manage.py createsuperuser --username=joe --email=joe@example.com

これにより、移行によって自動生成される「auth_user」テーブルにエントリが作成されます。django.contrib.auth メソッド呼び出しを使用して認証後にユーザーを検索する方法に興味があります。ユーザーにログインしてJWTを発行するために使用するこのシリアライザーがあります

class UserLoginSerializer(serializers.Serializer):

    username = serializers.CharField(max_length=255)
    password = serializers.CharField(max_length=128, write_only=True)
    token = serializers.CharField(max_length=255, read_only=True)

    def validate(self, data):
        username = data.get("username", None)
        password = data.get("password", None)
        user = authenticate(username=username, password=password)
        if user is None:
            raise serializers.ValidationError(
                'A user with this email and password is not found.'
            )
        try:
            payload = JWT_PAYLOAD_HANDLER(user)
            jwt_token = JWT_ENCODE_HANDLER(payload)
            update_last_login(None, user)
        except User.DoesNotExist:
            raise serializers.ValidationError(
                'User with given email and password does not exists'
            )
        return {
            'username':user.username,
            'token': jwt_token
        }

auth_user テーブルからユーザーに関する情報を検索できるエンドポイントが必要です。

class UserProfileView(RetrieveAPIView):

    permission_classes = (IsAuthenticated,)
    authentication_class = JSONWebTokenAuthentication

    def get(self, request):
        try:
            token = get_authorization_header(request).decode('utf-8')
            if token is None or token == "null" or token.strip() == "":
                raise exceptions.AuthenticationFailed('Authorization Header or Token is missing on Request Headers')
            decoded = jwt.decode(token, settings.SECRET_KEY)
            username = decoded['username']
                # how to lookup the user at this point?
            status_code = status.HTTP_200_OK
            response = {
                'success': 'true',
                'status code': status_code,
                'message': 'User profile fetched successfully',
                'data': {
                        #...
                    }
                }

ユーザー名を取得した後、auth.contrib モジュールを使用してデータベースでユーザーを検索する適切な方法は何ですか?

4

1 に答える 1