У меня есть форма с токеном csrf, который работает.Изменяется ли информация CSRF при входе в систему через запрос ajax?
Существует также кнопка для загрузки изображения через ajax и поместите URL-адрес в текстовое поле первой формы на той же странице. У меня есть js inplace, чтобы установить значение csrf, и кнопка также работает нормально.
Если пользователь вошел в систему, абсолютно не проблема при первом использовании кнопки для вставки URL-адреса изображения, а затем сохранения формы.
Но когда у меня есть посетитель, который не вошел в систему, возникает проблема: при загрузке изображения автоматически создается новая учетная запись, и посетитель регистрируется без него.
while True:
try:
random_password = User.objects.make_random_password()
random_username = str(uuid.uuid1().hex)[:5]
new_temp_user = User.objects.create_user(random_username, password=random_password)
except IntegrityError:
pass
else:
new_user = authenticate(username=random_username,password=random_password)
login(request,new_user)
break
Поскольку это делается через Ajax, он не замечает никаких изменений на веб-сайте, который он видит. В первую форму добавляется только URL-адрес загруженного изображения. На стороне сервера он теперь зарегистрированный пользователь, но он еще не видит его. Теперь, когда он отправляет форму, проверка csrf терпит неудачу. У формы все еще есть токен csrf, но почему-то он стал недействительным.
Я подозреваю, что процесс входа в систему имеет некоторое влияние на токен csrf. Любые идеи, что я могу с этим поделать?
EDIT: Я проверил еще несколько вопросов и, похоже, проблема связана с логином. Кажется, что каждый логин меняет значение csrf. Теперь, когда пользователь получает логин через ajax, токен в форме не обновляется. Какой может быть лучший способ его обновления?
Хорошо освежающий вариант не является вариантом, так как пользователь уже мог помещать материал в форму. Я ознакомлюсь с обновлением токена. – JasonTS