Перенаправление Django прервано браузером?

У меня есть очень простое представление, предназначенное для отслеживания кликов пользователя и перенаправления их на внешнюю страницу:

def redirect_view(request, uu_id):
    my_model = MyModel.objects.get(uuid = uu_id)
    my_model.clicked_link = True
    my_model.save()
    return redirect('https://www.some-other-site.com')

Примерно для половины пользователей, взаимодействующих с этим представлением, оно работает отлично! Наши журналы показывают ответ 302 и больше ничего от пользователя.

Для другой половины наших пользователей они странным образом перенаправляются на базовый URL-адрес нашего сайта в http, затем, поскольку у нас есть SECURE_SSL_REDIRECT = True, они перенаправляются на https, и, наконец, поскольку они не аутентифицированы, они перенаправляются для аутентификации.

Наши логи для этого типа пользователей выглядят примерно так:

Feb 21 10:04:51 myapp heroku/router:  at=info method=GET path = "/redirect-url" host=mysite.com request_id=123 fwd = "..." dyno=web.1 connect=0ms service=25ms status=302 bytes=268 protocol=https 
Feb 21 10:04:51 myapp heroku/router:  at=info method=GET path = "/" host=mysite.com request_id=456 fwd = "..." dyno=web.1 connect=1ms service=3ms status=301 bytes=262 protocol=http 
Feb 21 10:04:52 myapp heroku/router:  at=info method=GET path = "/" host=mysite.com request_id=789 fwd = "..." dyno=web.1 connect=0ms service=2ms status=302 bytes=360 protocol=https 

В нашем коде нет ничего, что могло бы предложить перенаправление на наш базовый URL-адрес, поэтому я думаю только о том, что у них есть какая-то настройка браузера, которая ограничивает внешние перенаправления.

Может ли это каким-либо образом быть вызвано Джанго? Если это не проблема Django, что ее вызывает? и что было бы хорошим обходным путем?

Я не знаю настройки браузера, которая объяснила бы то, о чем вы сообщаете. Откуда вы знаете, что сценарий, который, по вашему мнению, происходит, является реальным? Подали ли пользователи отчеты, соответствующие тому, что вы видите в журнале? Если вы или ваши коллеги интерпретировали происходящее как исключительно, просматривая журналы, возможно, вы неверно истолковали происходящее.

Louis 28.03.2019 18:14

@Louis Это все интерпретация. У вас есть идеи, что еще может быть причиной этого?

grrrrrr 28.03.2019 22:46

Я бы попытался создать исключение внутри redirect_view(), чтобы посмотреть, что произойдет. Если последствия именно того поведения, которое вы описываете, то вы можете сосредоточить свое внимание на MyModel.objects.get() и my_model.save(). Я уверен, что Django не предпринимает никаких действий самостоятельно

Mario Orlandi 29.03.2019 08:40

@MarioOrlandi, с нашей стороны, мы видим, что модель обновляется, поэтому get() и save() работают успешно, это то, что вы описываете?

grrrrrr 29.03.2019 14:10

Э-э, понятно... в таком случае моя догадка неверна. Тем не менее, в целях расследования я бы сделал исключение из представления. Пользователь перенаправляется на страницу с ошибкой 500. Что происходит дальше?

Mario Orlandi 30.03.2019 08:23

Возможно ли, что это может быть вызвано веб-сайтом, на который вы перенаправляете своих пользователей? Может быть, у них есть функция, например, при выполнении определенных условий они перенаправляют запросы обратно на исходный хост?

Ozgur Akcali 30.03.2019 11:55

@OzgurAkcali Это интересная идея, но на моем компьютере я могу успешно следовать перенаправлениям и не могу воспроизвести проблему.

grrrrrr 01.04.2019 15:48

@grrrrrr Я думал так же, как OzgurAkcali. Хотя я не уверен, что это самая скорее всего причина. Еще одна вещь, которая может произойти, заключается в том, что у некоторых пользователей есть настройка или расширение, которые заставляют их браузер выполнять запрос на главной странице вашего сайта независимо перенаправления. Они не перенаправляются обратно на ваш сайт, но примерно в то же время выполняется запрос еще один, когда они перенаправляются на другой сайт. Вот почему я спросил, были ли у вас пользователи, жалующиеся на то, что их перенаправляют обратно. Просто просматривая журналы, легко сделать вывод о несуществующих соединениях.

Louis 02.04.2019 13:03

@Louis, спасибо, что нашли время, чтобы продолжить. Вчера мне удалось связаться с одним из пользователей по телефону и получить дополнительную информацию. Доступ к рассматриваемому представлению и другим, где я вижу подобное поведение, осуществляется по ссылке, отправленной по электронной почте. Пользователь, с которым я разговаривал, утверждал, что не нажимал на ссылку, когда мы увидели странную переадресацию, поскольку он не работает по воскресеньям, но говорит, что у них есть интенсивный сканер электронной почты. Я настроил дополнительное ведение журнала, чтобы видеть пользовательский агент при доступе к этим представлениям, что, я думаю, может помочь точно определить, что происходит...

grrrrrr 02.04.2019 15:59

Есть ли какой-либо Javascript в ваших шаблонах по этому поводу??

CyberHavenProgramming 03.04.2019 20:57

@PwnSauceDesigns в этом потоке представления не используются шаблоны

grrrrrr 03.04.2019 21:26

@grrrrrr Не могли бы вы сократить шаблоны URL?

CyberHavenProgramming 03.04.2019 21:28
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
12
245
0

Другие вопросы по теме