Перенаправление на обычное представление Django после входа в систему с помощью DRF API
Я получаю это в своей консоли всякий раз, когда я вхожу в систему, он успешно входит в систему, API возвращает 200, но затем, когда он пытается перенаправить на представление приборной панели, он возвращает 302 и перенаправляет на страницу входа
[09/Aug/2024 18:17:04] "GET /static/js/login.js HTTP/1.1" 200 2297
[09/Aug/2024 18:17:24] "POST /api/v1/token/login HTTP/1.1" 200 70
[09/Aug/2024 18:17:25] "GET /dashboard/ HTTP/1.1" 302 0
[09/Aug/2024 18:17:25] "GET /accounts/login/?next=/dashboard/ HTTP/1.1" 200 1451
[09/Aug/2024 18:17:25] "GET /static/js/login.js HTTP/1.1" 304 0
[09/Aug/2024 18:18:46] "GET /accounts/login/?next=/dashboard/ HTTP/1.1" 200 1451
Ниже приведен мой API для входа в систему, который проверяет подлинность пользователя, пытающегося войти в систему:
import json
from rest_framework.decorators import api_view,permission_classes
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated, AllowAny
from rest_framework import status
from core.models import Order, Laundry
from .serializers import OrderSerializer, SignUpSerializer
from django.views.decorators.csrf import ensure_csrf_cookie,csrf_exempt, csrf_protect
from rest_framework.authtoken.models import Token
from django.contrib.auth import authenticate,logout, login,get_user_model
@api_view(['POST'])
@permission_classes([AllowAny])
@ensure_csrf_cookie
def user_login_token(request):
"""user login api"""
if request.method == 'POST':
email = request.data.get('Email')
password = request.data.get('Password')
current_user = authenticate(request, username=email, password=password)
if current_user:
login(request, current_user)
token, created = Token.objects.get_or_create(user=current_user)
response = Response({'token': token.key, 'SuperRole': current_user.is_superuser}, status=status.HTTP_200_OK)
return response
return Response({'error': 'Invalid credentials'}, status=status.HTTP_400_BAD_REQUEST)
Вот мой код, прослушивающий, когда пользователь отправляет форму (нажимает кнопку входа):
const loginForm = document.querySelector('form');
loginForm.addEventListener('submit', async(event) => {
event.preventDefault();
const email = document.getElementById('email').value;
const password = document.getElementById('password').value;
const csrfToken = document.querySelector('meta[name="csrf-token"]').content;
try {
const response = await fetch('http://127.0.0.1:8000/api/v1/token/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRFToken': csrfToken,
},
body: JSON.stringify({
Email: email,
Password: password
}),
credentials: 'include'
});
const data = await response.json();
if (response.ok) {
const token = data.token;
localStorage.setItem('token', token);
if (data.SuperRole) {
console.log("administrator login");
} else {
window.location.href = '/dashboard/';
}
} else {
console.error('Error:', data);
}
} catch (error) {
console.error('Error:', error);
}
});
function getCookie(name) {
let cookieValue = null;
if (document.cookie && document.cookie !== '') {
const cookies = document.cookie.split(';');
for (let i = 0; i < cookies.length; i++) {
const cookie = cookies[i].trim();
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
Ниже показана моя приборная панель:
@login_required
def user_dashboard(request):
return render(request, "user_dashboard.html")