Ссылки на страницу администратора django не работают и всегда перенаправляют на главную страницу (/admin)

Мы запускаем django с gunicorn + Nginx на amazon ecs с помощью docker. Для аутентификации и в качестве провайдера SSO (single sign-on) мы используем Auth0. Ссылки на страницу администратора работали нормально в течение некоторого времени, но внезапно перестали работать в нашей среде разработки. Все ссылки на странице администратора перенаправляют обратно на главную страницу администратора, т.е. если вы нажмете на модель User, чтобы увидеть пользователей, вы просто будете перенаправлены обратно на главную страницу администратора. Мы перепробовали множество решений, и для нас это была очень странная ошибка. Основная причина, по которой эта ошибка так запутанна, заключается в том, что у нас есть такой же точный код с аналогичными конфигурациями на нашей промежуточной среде, и все ссылки на страницу администратора прекрасно работают в ней.

Для включения аутентификации и SSO с Auth0 мы используем библиотеку python под названием python-social-auth и мы думаем, что проблема может быть вызвана cookie или перенаправлением, исходящим от нее. Поэтому мы попробовали различные конфигурации для нее согласно документации и некоторым ответам на StackOverflow на вопросы, похожие на этот, но безрезультатно. Вот наша текущая конфигурация settings.py:

# Auth0 Authentication Related Configs Keys
SOCIAL_AUTH_PROTECTED_USER_FIELDS = [
    "name",
    "email",
]
SOCIAL_AUTH_TRAILING_SLASH = False  # Remove trailing slash from routes
SOCIAL_AUTH_AUTH0_DOMAIN = config("SOCIAL_AUTH_AUTH0_DOMAIN")
SOCIAL_AUTH_AUTH0_KEY = config("SOCIAL_AUTH_AUTH0_KEY")
SOCIAL_AUTH_AUTH0_SECRET = config("SOCIAL_AUTH_AUTH0_SECRET")
SOCIAL_AUTH_AUTH0_SCOPE = ["openid", "profile", "email"]
LOGIN_URL = "/login/auth0"
LOGIN_REDIRECT_URL = "/"
if DEBUG:
    SESSION_COOKIE_SECURE = False
    SESSION_COOKIE_SAMESITE = None
    SOCIAL_AUTH_FIELDS_STORED_IN_SESSION = ["state"]
else:
    # production configs
    SOCIAL_AUTH_REDIRECT_IS_HTTPS = True
    SESSION_COOKIE_SECURE = True
    SESSION_COOKIE_SAMESITE = None
    SOCIAL_AUTH_FIELDS_STORED_IN_SESSION = ["state"]

SOCIAL_AUTH_PIPELINE = (
    "social_core.pipeline.social_auth.social_details",
    "social_core.pipeline.social_auth.social_uid",
    "social_core.pipeline.social_auth.auth_allowed",
    "social_core.pipeline.social_auth.social_user",
    "social_core.pipeline.user.get_username",
    "social_core.pipeline.social_auth.associate_by_email",  # <--- enable this one
    "social_core.pipeline.user.create_user",
    "social_core.pipeline.social_auth.associate_user",
    "myapp.auth0authorization.process_roles",  # <--- check the user role
    "social_core.pipeline.social_auth.load_extra_data",
    "social_core.pipeline.user.user_details",
)

Вышеуказанная конфигурация установлена и для нашей среды staging, и она прекрасно работает. Мы понятия не имеем, почему это не работает на нашей среде dev, и даже не можем понять, откуда исходит проблема. Любая помощь будет очень признательна!

Другая странная вещь, которую мы поняли, это то, что в неработающей ссылке, если вы продолжаете нажимать на нее, например, 3 или 4 раза, она работает и переводит вас на правильную страницу, затем, когда вы снова нажимаете на любую ссылку, она перенаправляет вас обратно на главную страницу администратора.

Мы думаем, что решение может быть связано с Nginx, возможно, с перенаправлением на HTTPS. Итак, вот наша конфигурация Nginx

server {
listen 8088;

server_name _;


location / {
    proxy_pass http://127.0.0.1:8000;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /static/ {
    root /code;
}

location /healthcheck {
    add_header Content-Type text/plain;
    alias /code/healthcheck.txt;
}

}

вот urls.py (он довольно стандартный)

# disable django admin page login and change to auth0
admin.autodiscover()
admin.site.login = login_required(admin.site.login, login_url="../../login/auth0")

urlpatterns = [
    path("admin/logout/", myapp.views.logout),
    path("admin/", admin.site.urls),]

мы готовы предоставить любую другую необходимую информацию

Вернуться на верх