Я создаю приложение с использованием DRF в качестве бэкэнда и Vuejs для внешнего интерфейса. Мне уже удалось создать систему аутентификации с использованием токенов JWT в DRF, но у меня возникают трудности с попыткой получить аутентифицированного пользователяинформация.Когда я регистрирую пользователя, которого я храню, токен в локальном хранилище отображается как
localStorage.setItem('user-token', response.data.token)
Но когда я пытаюсь получить информацию о пользователе, отправляя запрос http get с заголовком авторизации, я получаю 401 запрещенную ошибку
detail: "Authentication credentials were not provided."
Вот мой код: я установил авторизацию заголовка следующим образом с помощью axios
const token = localStorage.getItem('user-token')
if (token) {
axios.defaults.headers.common['Authorization'] =
Basic $ {token}
}
Запрос get в vue
getUser(){
axios.get(this.url +'/api/auth/user/')
.then( (response) =>{
console.log(response.data);
});
Мои views.py
class UserViewSet(APIView):
permission_classes = [permissions.IsAuthenticated]
def get(self, request):
serializer = UserSerializer(request.user)
return Response(serializer.data)
Мой сериализатор
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('username', )
Когда я удаляю класс разрешений, я получаю пустое поле имени пользователя в качестве ответа, в противном случае это 401ошибка, как упоминалось ранее.Я вижу, что заголовок авторизации отправляется в браузере.Любые решения, пожалуйста?
мои settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
#Third party
'webpack_loader',
'rest_framework',
'corsheaders',
#Local apps
'users',
]
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',
#Cors
'corsheaders.middleware.CorsMiddleware',
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
#'rest_framework.authentication.BasicAuthentication',
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
'rest_framework.authentication.SessionAuthentication', #Oauth, JWT
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticatedOrReadOnly',
),
'DEFAULT_FILTER_BACKENDS': (
'rest_framework.filters.SearchFilter',
'rest_framework.filters.OrderingFilter',
),
'SEARCH_PARAM': 'q',
'ORDERING_PARAM': 'ordering',
}
JWT_AUTH = {'JWT_ENCODE_HANDLER': 'rest_framework_jwt.utils.jwt_encode_handler',
'JWT_DECODE_HANDLER':
'rest_framework_jwt.utils.jwt_decode_handler',
'JWT_PAYLOAD_HANDLER':
'rest_framework_jwt.utils.jwt_payload_handler',
'JWT_PAYLOAD_GET_USER_ID_HANDLER':
'rest_framework_jwt.utils.jwt_get_user_id_from_payload_handler',
'JWT_RESPONSE_PAYLOAD_HANDLER':
#'rest_framework_jwt.utils.jwt_response_payload_handler'
'users.api.utils.jwt_response_payload_handler',
'JWT_ALLOW_REFRESH': True,
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),
'JWT_AUTH_HEADER_PREFIX': 'JWT', # Authorization: JWT <token>
'JWT_AUTH_COOKIE': None,
}
#Cors
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True