У меня есть очень простое представление, предназначенное для отслеживания кликов пользователя и перенаправления их на внешнюю страницу:
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 Это все интерпретация. У вас есть идеи, что еще может быть причиной этого?
Я бы попытался создать исключение внутри redirect_view(), чтобы посмотреть, что произойдет. Если последствия именно того поведения, которое вы описываете, то вы можете сосредоточить свое внимание на MyModel.objects.get() и my_model.save(). Я уверен, что Django не предпринимает никаких действий самостоятельно
@MarioOrlandi, с нашей стороны, мы видим, что модель обновляется, поэтому get() и save() работают успешно, это то, что вы описываете?
Э-э, понятно... в таком случае моя догадка неверна. Тем не менее, в целях расследования я бы сделал исключение из представления. Пользователь перенаправляется на страницу с ошибкой 500. Что происходит дальше?
Возможно ли, что это может быть вызвано веб-сайтом, на который вы перенаправляете своих пользователей? Может быть, у них есть функция, например, при выполнении определенных условий они перенаправляют запросы обратно на исходный хост?
@OzgurAkcali Это интересная идея, но на моем компьютере я могу успешно следовать перенаправлениям и не могу воспроизвести проблему.
@grrrrrr Я думал так же, как OzgurAkcali. Хотя я не уверен, что это самая скорее всего причина. Еще одна вещь, которая может произойти, заключается в том, что у некоторых пользователей есть настройка или расширение, которые заставляют их браузер выполнять запрос на главной странице вашего сайта независимо перенаправления. Они не перенаправляются обратно на ваш сайт, но примерно в то же время выполняется запрос еще один, когда они перенаправляются на другой сайт. Вот почему я спросил, были ли у вас пользователи, жалующиеся на то, что их перенаправляют обратно. Просто просматривая журналы, легко сделать вывод о несуществующих соединениях.
@Louis, спасибо, что нашли время, чтобы продолжить. Вчера мне удалось связаться с одним из пользователей по телефону и получить дополнительную информацию. Доступ к рассматриваемому представлению и другим, где я вижу подобное поведение, осуществляется по ссылке, отправленной по электронной почте. Пользователь, с которым я разговаривал, утверждал, что не нажимал на ссылку, когда мы увидели странную переадресацию, поскольку он не работает по воскресеньям, но говорит, что у них есть интенсивный сканер электронной почты. Я настроил дополнительное ведение журнала, чтобы видеть пользовательский агент при доступе к этим представлениям, что, я думаю, может помочь точно определить, что происходит...
Есть ли какой-либо Javascript в ваших шаблонах по этому поводу??
@PwnSauceDesigns в этом потоке представления не используются шаблоны
@grrrrrr Не могли бы вы сократить шаблоны URL?





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