Активация учетной записи с помощью Django в новейшем Safari не работает
Я столкнулся со странной проблемой при использовании Djoser для активации учетной записи. Мое веб-приложение успешно позволяет вам зарегистрировать учетную запись и отправляет вам активационный email для вашей учетной записи. Однако при вводе ссылки активации, отправленной на мой email в Safari, я получаю ответ 401 (неавторизованный). При вводе ссылки активации в Chrome учетная запись успешно активируется. Почему это может происходить?
Следует также отметить, что у меня все Dockerized и работает через NGINX. Если я локально запускаю свое приложение React с помощью npm start, а затем добавляю :3000 к полученному URL для активации, это также успешно работает для активации учетной записи в Safari. Например, если я получаю http://localhost/activate/xyz/abcdef в качестве активационного email, редактирую его до http://localhost:3000/activate/xyz/abcdef и ввожу этот URL в Safari при локальном запуске приложения React, он успешно активирует аккаунт.
В моем settings.py есть такая конфигурация для Djoser:
DJOSER = {
"USER_ID_FIELD": "username",
"LOGIN_FIELD": "email",
"SEND_ACTIVATION_EMAIL": True,
"ACTIVATION_URL": "activate/{uid}/{token}",
"PASSWORD_RESET_CONFIRM_URL": "reset_password/{uid}/{token}",
'SERIALIZERS': {
'token_create': 'apps.accounts.serializers.CustomTokenCreateSerializer',
},
}
PROTOCOL = "http"
DOMAIN = "localhost"
if not DEBUG:
PROTOCOL = "https"
DOMAIN = "domain.com"
EMAIL_HOST = 'smtp.gmail.com'
DEFAULT_FROM_EMAIL = 'Don\'t Reply <do_not_reply@' + DOMAIN + '.com>'
EMAIL_HOST_USER = 'xyz@gmail.com'
EMAIL_HOST_PASSWORD = 'xyz'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
SITE_NAME = "xyz"
CORS_ALLOWED_ORIGINS = [
"http://localhost:3000",
"http://127.0.0.1:3000",
"http://localhost",
"http://127.0.0.1",
]
Это в моем App.js:
<Route path="/activate/:uid/:token" component={ActivateAccount} />
Вот соответствующая часть ActivateAccount.js:
componentDidMount() {
const { uid, token } = this.props.match.params;
axios
.post("/api/v1/users/activation/", { uid, token })
.then(response => {
this.setState({ status: "success" });
})
.catch(error => {
this.setState({ status: "error" });
});
}
Заранее спасибо! Дайте мне знать, если потребуется любая другая информация.