Я использую структуру Django REST с Django для серверной части и React для внешнего интерфейса. Я пытаюсь сделать запрос GET из моего внешнего интерфейса в конечную точку get_user. Однако даже когда я вызывал login_user и подтверждал, что user_is_authenticated = true с помощью этой функции, когда я вызываю конечную точку get_user, она всегда возвращает false, и я получаю AnonymousUser. В моем вызове axios переднего плана я установил для параметра withCredentials значение true. Я также подтвердил, что session_id создается в разделе хранилища в инструментах разработки Chrome.
внешний вызов конечной точки get_user
useEffect(() => {
(async () => {
axios
.get(url, {
withCredentials: true,
})
.then((res) => {});
})();
}, [location]);
Файлviews.py
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.hashers import make_password
from rest_framework import serializers, status, permissions, status
from rest_framework.decorators import api_view, authentication_classes
from rest_framework.response import Response
from users.serializers import UserSerializer
from django.contrib.auth.models import User
@api_view(['GET'])
def get_user(request):
print(request.user.is_authenticated)
return Response(status=status.HTTP_200_OK)
@api_view(['POST'])
def register_user(request):
match_username = User.objects.all().filter(
username=request.data['username'])
match_email = User.objects.all().filter(email=request.data['email'])
serializer = UserSerializer(data=request.data)
if serializer.is_valid() and not match_username and not match_email:
user = User.objects.create(username=serializer.data['username'], password=make_password(
serializer.data['password']), email=serializer.data['email'])
user.save()
send_register_email(
serializer.data['username'], serializer.data['email'])
return Response(status=status.HTTP_201_CREATED, data=UserSerializer(user).data)
else:
if match_username:
return Response(status=status.HTTP_400_BAD_REQUEST, data='Username already exists')
elif match_email:
return Response(status=status.HTTP_400_BAD_REQUEST, data='Email already exists')
else:
return Response(status=status.HTTP_400_BAD_REQUEST, data="Invalid email")
@api_view(['POST'])
def login_user(request):
username = User.objects.all().filter(username=request.data['username'])
if not username:
return Response(status=status.HTTP_400_BAD_REQUEST, data='Username not found')
user = authenticate(
username=request.data['username'], password=request.data['password'])
if user is not None:
login(request, user)
return Response(status=status.HTTP_200_OK, data=UserSerializer(user).data)
else:
return Response(status=status.HTTP_400_BAD_REQUEST, data='Incorrect password')
settings.py (соответствующие части)
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.sites',
'django.contrib.staticfiles',
'rest_framework',
'rest_framework.authtoken',
'corsheaders',
'users',
'settings',
]
MIDDLEWARE = [
"corsheaders.middleware.CorsMiddleware",
"django.middleware.common.CommonMiddleware",
'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',
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.SessionAuthentication',
]
}
PASSWORD_HASHERS = [
"django.contrib.auth.hashers.PBKDF2PasswordHasher",
"django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher",
"django.contrib.auth.hashers.Argon2PasswordHasher",
"django.contrib.auth.hashers.BCryptSHA256PasswordHasher",
"django.contrib.auth.hashers.ScryptPasswordHasher",
]
ROOT_URLCONF = 'users.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'users.wsgi.application'
# CORS
CORS_ALLOW_ALL_ORIGINS = True
CORS_ALLOW_CREDENTIALS = True
Подробнее здесь: https://stackoverflow.com/questions/781 ... -logged-in
Сеанс Django никогда не аутентифицируется, даже если пользователь вошел в систему. ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Пользователь в веб-приложении ASP.NET MVC вошел в систему как другой пользователь.
Anonymous » » в форуме C# - 0 Ответы
- 23 Просмотры
-
Последнее сообщение Anonymous
-