Я следую этому руководству по аутентификации с django -graphql-jwt. У меня не получается выполнить шаг Проверка аутентификации.
Я получаю действительный токен через ObtainJSONWebToken, но когда я вставляю этот токен в авторизацию заголовка HTTP и выполняю запрос ( me ), который проверяет статус пользователя дает анонимный пользователь.
Когда я захожу на страницу администрирования django, он работает без токена. Кажется, что промежуточное ПО не работает должным образом, но это всего лишь предположение.
Вот мой код и то, что я делаю:
settings.py:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
GRAPHENE = {
'SCHEMA': 'schema.py',
'MIDDLEWARE': [
'graphql_jwt.middleware.JSONWebTokenMiddleware'
]
}
schema.py
class Query(teamorgaisation_queries.Query, users_queries.Query, graphene.ObjectType):
# this class inherits multiple Queries as we add more apps with their own schema
pass
class Mutation(teamorganisation_mutations.Mutation, users_mutations.Mutation, graphene.ObjectType):
token_auth = graphql_jwt.ObtainJSONWebToken.Field()
verify_token = graphql_jwt.Verify.Field()
refresh_token = graphql_jwt.Refresh.Field()
me-query
import graphene
from django.contrib.auth.models import User
from django.core.exceptions import ObjectDoesNotExist
from voss_be_django.users.graphql.types import UserType
class Query(graphene.ObjectType):
me = graphene.Field(UserType)
def resolve_me(self, info):
user = info.context.user
if user.is_anonymous:
raise Exception('Not logged in!')
return user
Почтальон запрос без заголовка авторизации:
mutation tokenAuth($username: String!, $password: String!){
tokenAuth(username: $username, password: $password){
token
}
}
переменные:
{
"username": "testUser",
"password": "UserTest#1234"
}
ответ (внутри <> есть действительный токен):
{
"data": {
"tokenAuth": {
"token": "<my_jwt_token>"
}
}
}
Затем я вставляю токен в заголовок:
{
Authorization: "JWT <my_jwt_token>",
Content-Type: "application/json"
}
query:
query me {
me{
id
username
}
}
ответ:
{
"errors": [
{
"message": "Not logged in!",
"locations": [
{
"line": 2,
"column": 5
}
],
"path": [
"me"
]
}
],
"data": {
"me": null
}
}
info.context.user, полученный в запросе me, является anonymousUser, но я ожидаю, что это обычный пользователь , Что я делаю не так?