2015-02-16 5 views
1

У меня есть форма с токеном 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, токен в форме не обновляется. Какой может быть лучший способ его обновления?

ответ

2

Маркер csrf вращается, когда пользователь входит в систему. Это было добавлено в качестве меры безопасности в Django 1.5.2 (release notes).

После запроса ajax вы можете получить новый токен csrf из файла cookie и обновить форму в DOM. В качестве альтернативы, вы можете обновить страницу после входа пользователя.

+0

Хорошо освежающий вариант не является вариантом, так как пользователь уже мог помещать материал в форму. Я ознакомлюсь с обновлением токена. – JasonTS

 Смежные вопросы

  • Нет связанных вопросов^_^