Django 管理员突然仅在生产环境中注销(拒绝执行脚本,因为其 MIME 类型('text/html')不可执行)

问题描述 投票:0回答:2

每当我在 django 管理员上执行保存、更新或过滤等操作时,就有可能重定向到登录页面,并且需要再次登录。这种行为经常发生,但奇怪的是:它只发生在生产环境中。我正在使用 AWS fargateECS 集群 上运行应用程序。当我检查浏览器存储时,有 3 个 cookie:

csrftoken
sessionid
djdt
。所有这些都有很长的过期时间(至少一周)。

我的settings.py具有以下会话配置:

SESSION_CACHE_ALIAS = 'sessions'
# The module to store session data
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
# A string like "example.com", or None for standard domain cookie.
SESSION_COOKIE_DOMAIN = env.str('SESSION_COOKIE_DOMAIN', default=None)
# Whether the session cookie should be secure (https:// only).
SESSION_COOKIE_SECURE = not DEBUG
# why it doesn't resolve the sundenly logout problem!?
SESSION_COOKIE_AGE= 24*60*60*7

我尝试了以下问题,但它们对我不起作用:

任何帮助将不胜感激

编辑 我发现了一些重要的线索:

在我重定向之前,浏览器控制台上会出现以下错误:

Refused to execute script from '<my_url>/jsl18n' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled

显示错误消息后,任何点击或与管理员的交互都会导致重定向到登录页面。 我在管理上使用一些非常简单的 JS 文件来根据用户交互隐藏/显示一些字段。我认为这个按摩与这些静态js文件有一些关系。我发现这个错误消息存在一些问题,而且它看起来不是 django 特有的。但这些问题对我根本没有帮助。

python django django-admin mime-types mime
2个回答
4
投票

终于我明白了。我改变了我的

settings.py
:

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

CACHES = {
    'default': env.cache(
        'CACHES_DEFAULT_URL', default='locmemcache://cache-default'),
    'sessions': env.cache(
        'CACHES_SESSIONS_URL', default='locmemcache://cache-sessions'),
    'memory': env.cache(
        'CACHES_MEMORY_URL', default='locmemcache://cache-memory'),
}

至:

SESSION_ENGINE = 'django.contrib.sessions.backends.db'

我不知道它到底为什么起作用,但也许本地内存缓存策略在集群环境中不是一个好的选择。如果有人有更好的猜测,请告诉我。


0
投票

我为我的生产项目激活 django-admin 界面。它在开发环境中正常工作,但在生产环境中不起作用。我尝试丢失设置,但将

SESSION_ENGINE
更改为 db 对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.