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 не может обнаружить пользователя в контексте.