Django JWT graphql auth не может определить вошедшего пользователя

Я реализовал jwt с graphql в django с помощью django-graphql-jwt. У меня есть graphql django userType как :



class UserType(DjangoObjectType):
    class Meta:
        model = User
        fields = ('id', 'username', 'email','first_name','last_name', 'is_active')

и использовать tokenAuth для входа пользователя в систему. Схема мутации выглядит следующим образом:


class Mutation(graphene.ObjectType):
    
    token_auth = graphql_jwt.ObtainJSONWebToken.Field()
    refresh_token = graphql_jwt.Refresh.Field()
    verify_token = graphql_jwt.Verify.Field()

schema = graphene.Schema(query=Query, mutation=Mutation)

и я вызываю его этим запросом и успешно получаю ответ:

mutation loginUser(
      $email: String!,
      $password: String!) {
      tokenAuth(
        email: $email,
        password: $password) {
        token
        refreshToken
        payload
      }
    }

Запрос verifyToken также успешно работает, когда я вызываю его и помещаю возвращенный токен в мои переменные запроса:


mutation VerifyToken($token: String!) {
  verifyToken(token: $token) {
    payload
  }
}

Но когда я хочу получить зарегистрированного пользователя в запросе, Django не обнаруживает его. Класс запроса реализован следующим образом:


class Query(graphene.ObjectType):
    #other stuff
    profile = graphene.Field(UserType)

    #other resolvers
    
    def resolve_profile(root, info, **kwargs):
        
        user = info.context.user
        #This line always prints "AnonymousUser"
        print(user)

        jwt_payload_handler = jwt_settings.JWT_PAYLOAD_HANDLER
        jwt_encode_handler = jwt_settings.JWT_ENCODE_HANDLER
        payload = jwt_payload_handler(user)
        token = jwt_encode_handler(payload)
        #This line does not print anything (print is not called). probably because the process had an exception in above lines
        print("Token is ", token)

        try:
            return user
        except User.DoesNotExist:
            return None

Запрос выглядит следующим образом:

query profile{
  profile{
  email
  username

  }
  
}


И я поместил "Authorization": "JWT [the token]" в заголовки запроса. Но я получаю "'AnonymousUser' object has no attribute 'email'" ошибку в ответе на запрос.

Насколько я понимаю, я могу успешно войти в систему и получить действительный токен, но когда я хочу, чтобы пользователь был авторизован с помощью токена, Django не может обнаружить пользователя в контексте.

Вернуться на верх