Django Djoser не работает в production return 405 при использовании react в качестве фронтенда
В моем приложении я использую Django в качестве бэкенда и react JS для фронтенда. Я использую Django Djoser для активации пользователя и сброса пароля. Локально все работает нормально. После создания нового пользователя, ссылка активации будет отправлена на его email
http://127.0.0.1/activate/MjE1/c1vk2z-0cf8bc5d2484ddd32001844b53da1900
Если я использую свой домен https://workmatch.rickykristianbutarbutar.com/activate/MjE1/c1vk2z-0cf8bc5d2484ddd32001844b53da1900 то выходит 405
после нажатия на эту ссылку произойдет переход на страницу активации фронтенда, затем пользователь нажмет кнопку "Активировать"
const sendActivationConfirmation = async () => {
setButtonLabel("Activating ...");
try {
let response = await fetch(`/auth/users/activation/`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
uid: uid,
token: token
})
});
if (response.ok) {
setAlert({
success: "Your account has been activated. We'll redirect you to the login page in 5 seconds.",
});
activationSuccess.current = true;
} else if (response.status === 403) {
let data = await response.json();
setAlert({
error: data.error
});
} else if (response.status === 400) {
setAlert({
error: "Bad Request, user may have been accidentally deleted."
});
}
} catch (error) {
if (error.name === "SyntaxError" && error.message.includes("Unexpected end of JSON input")) {
console.error("Truncated data: Not all of the JSON data was received");
} else {
console.error(error);
}
} finally {
setButtonLabel("Activate");
}
};
этот код будет кодом активации и отправьте его на сервер
Это мои настройки Djoser в файле Django settings.py
DJOSER = {
"USER_ID_FIELD": "username",
"LOGIN_FIELD": "email",
"USER_CREATE_PASSWORD_RETYPE": True,
"USERNAME_CHANGED_EMAIL_CONFIRMATION": True,
"PASSWORD_CHANGED_EMAIL_CONFIRMATION": True,
"SEND_CONFIRMATION_EMAIL": True,
"SET_USERNAME_RETYPE": True,
"SET_PASSWORD_RETYPE": True,
"PASSWORD_RESET_CONFIRM_URL": "#/password/reset/confirm/{uid}/{token}",
"USERNAME_RESET_CONFIRM_URL": "#/email/reset/confirm/{uid}/{token}",
"ACTIVATION_URL": "activate/{uid}/{token}",
"SEND_ACTIVATION_EMAIL": True,
"SERIALIZERS": {
"activation": "djoser.serializers.ActivationSerializer",
"user_create": "userApi.serializers.UserCreateSerializer",
"user": "userApi.serializers.UserCreateSerializer",
"user_delete": "djoser.serializer.UserDeleteSerializer",
},
}
enter code here
А это мой urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('api/user/', include('userApi.urls')),
# JWT authentication
re_path(r'^auth/', include('djoser.urls')),
re_path(r'^auth/', include('djoser.urls.jwt')),
path('ckeditor/', include('ckeditor_uploader.urls')),
]
Все работает нормально, пока я не разверну его на моем рабочем сервере Есть ли какие-нибудь параметры, которые нужно настроить на стороне сервера? Я использую Ngix и gunicorn
вот моя конфигурация nginx
server {
root /root/WorkMatch/frontend/HiringRemoteWorker-Frontend/build/;
index index.html index.htm /index.html;
server_name workmatch.rickykristianbutarbutar.com;
location /static/ {
alias /root/WorkMatch/frontend/HiringRemoteWorker-Frontend/build/static/;
}
location / {
try_files $uri $uri/ /index.html;
}
location /api/ {
# Proxy requests to Gunicorn/Django backend
proxy_pass http://127.0.0.1:8001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ~ ^/admin {
proxy_pass http://unix:/root/WorkMatch/backend/HiringRemoteWorker/HiringRemoteWorker.sock;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /django-static {
autoindex on;
alias /root/WorkMatch/backend/HiringRemoteWorker/staticfiles;
}
location /media/ {
alias /root/WorkMatch/backend/HiringRemoteWorker/media/profile_picture/;
}
}